The #1 Magazine For Atari Computer Owners
ISSUE 74
JULY 1989
SPECIAL
DISK VERSION $12.95
\w
nJ
CHAOS
CHARACTER SET
DISPLAY UTILITY
DEGAS VIEW
REVIEWS:
CRYSTAL CASTLES
INTO THE EAGLFS [»
SSUE:
74369"50077'
Give 'EmA.N.A.L.O.G..Harrv!
Two Historic Facts:
Dewey did not defeat. Truman for the Presidency in 1945.
. Truman went on to be known for his truthful, forthright style
and as one of the nation's most popular Chief Executive Officers.
2 You can save time, and save a lot of money by subscribing to
A.N.A.L.O.G. Computing Magazine. Save $19 off the cover
price with the convenience of having A.N.A.L.O.G. delivered directly
to your door before it even hits the newsstands. To order use the
handy postage-paid order card located in the back of this magazine!
1 YEAR FOR ONLY $28
SAVE 119 OFF THE COVER PRICE
1 YEAR WITH DISK ONLY $79
It's an understatement to say that the
Atari community is in turmoil— Atari
computer owners are consistently bar-
raged by soothsayers ringing the death
knell for their favorite computers and the
company that makes them— even though the
machines have given many thousands of peo-
ple good service down through the years. And
through it all, Atari has survived, in one form
or another, to bring further surprises to the
marketplace.
Having just returned from the World of
Atari show in Anaheim, California, it's nice
to see a few good companies still supporting
the 8-bit line of computers. Though many
power users feel lost without an "-est" com-
puter— latest, fastest, biggest and so on— we
all know how capable the Atari 8-bit line has
been for so long. And with a few companies
still striving to better them, we can continue
to be productive and entertained.
JULY A.IM.A.L.O.S. Computing
by Andy Eddy
But the most important support that Atari
computer owners get is from fellow users, as
the pages of ANALOG Computing testify.
Each month we present informative reviews
and articles, as well as type-in programs and
tutorials, all written by your fellow Atari
users. And this month, of course, is no
different.
For example, much has been said over the
last few years about the graphics abilities of
the ST line of computers. Even so, we all
know that the 8-bit line is no slouch in the
graphics department. To prove it, Matt Rat-
cliff has put together a program that lets 8-bit
users look at high-resolution, DEGAS-format
ST pictures, with virtually no loss of detail.
When you consider the power of the hard-
ware, it's not hard to understand how Matt
and others have stretched it beyond what most
expect it could handle. After all, the Ninten-
do Entertainment System uses a 6502 pro-
cessor, the same one that's used in the Atari
8-bit line, and we all know how popular the
NES is these days! Along the same lines,
there's a new game machine called the
TurboGrafx-16— known in Japan as the PC
Engine— due to be released shortly with an
updated version of the 6502, and the output
of this console is nothing short of
phenomenal.
The capabilities are there, waiting to be
tapped. All it takes is a mixture of ingenuity,
imagination and time. And don't forget that
your programming efforts can earn cold, hard
cash by being published in ANALOG Com-
puting. If you have something that 8-bit own-
ers can use, please send it to ANALOG
Computing, P.O. Box 1413- MO, Manchester,
CT 06040-1413 for consideration. Aside from
the fame and fortune you'll receive, it'll give
your fellow Atarians a little more "-est" for
their computer. (R
on page 10
FEATURES
8
Character Set Display Utility
This unique program will let you view up to six different font files all at the same
time. A great way to find out just what all those fonts you 've accumulated really are.
by Dave Arlington
10
Chaos
They say that the universe tends toward chaos. But does it really? Could there,
be some order in all that disorder?
by Alfredo L. Acosta
16
Disk Master
For those of you who want the power to directly access and manipulate your disk's
data, we present this commercial-quality disk editor.
by flairy Kolbe & Bryan Schappel
18
DEGAS View
ST pictures on your 8-bit computer? You bet!
by Matthew J.W. Ratclltl
54
AUTORUN.SYS Secrets in BASIC
A few months ago we published an assembly language AUTORUN.SYS maker. Now
here's a version for all you BASIC programmers.
by David ScftocA
74
Mazerunner
An interesting twist to the arcade maie-game genre. 100% machine language.
by Matt Fruln
on page 74
ANALOG Computing (ISSN 0744-9917) is published monthly by L.F.P., Inc., 9171 Wilshire Blvd., Suite 300, Beverly Hills, CA 90210. © 1989 L.F.P., Inc. Return
postage must accompany all manuscripts, drawings, photos, disks, etc., if they are to be returned, and no responsibility can be assumed for unsolicited materials.
All rights reserved on entire contents; nothing may be reproduced in whole or in part without written permission from the publisher. U.S. subscription: $28 for one
year (12 issues), $52 for two years (24 issues), $76 for three years (36 issues). Foreign subscription: Add $10 per year. Single copy $3.50 (add $1 for postage). Change
of address: Six weeks advance notice, and both old and new addresses are needed. POSTMASTER: Send change of address to ANALOG Computing Magazine,
P.O. Box 16927, North Hollywood, CA 91615. Second-class postage paid at Beverly Hills, CA, and additional mailing offices.
4 JULY A.N.A.L.O.B. Computing
67 Crystal Castles
(Atari Corp.)
by Matthew J. IV. Ratcliff
68 Into the Eagle's Nest
by Matthew J. IV. Ratcliff
14 ST Notes
by Frank Cohen
58 Boot Camp
by Tom Hudson
72 The End User
by Arthur Leyenberger
3 Editorial
by Andy Eddy
6 Reader Comment
n 8-bit News
64 MIL Editor
by Clayton Walnum
70 BASIC Editor II
by Clayton Walnum
ANALOG
COMPUTING
STAFF
Publisher
LEE H. PAPPAS
Executive Editor
CLAYTON WALNUM
Art Director
KRISTEL PECKHAM
Associate Editor
ANDY EDDY
Managing Editor
DEAN BRIERLY
East Coast Editor
ARTHUR LEYENBERGER
West Coast Editor
CHARLES F. JOHNSON
Contributing Editors
MICHAEL BANKS, FRANK COHEN,
MATTHEW J. W. RATCLIFF
Cover Photography
GARRY BROD
Models
JOHN BERADO
NORMA EDWARDS
Cover Illustration
ALAN HUNTER
Illustrations
JOHN BERADO
Copv Chief
KATRINA VEIT
Copy Editors
NORMA EDWARDS
RANDOLPH HEARD
KIM TURNER
SARAH WEINBERG
Editorial Assistant
PATRICIA KOURY
Chief Typographer
ALICE NICHOLS
Typographers
DAVID BUCHANAN
B. MIRO JR.
QUITA SAXON
Contributors
ALFRED L. ACOSTA
DAVE ARLINGTON
MATT FRUIN
TOM HUDSON
BARRY KOLBE
BRYAN SCHAPPEL
DAVID SCHOCH
Vice President, Production
DONNA HAHNER
Executive Art Director
PAMELA CARR
Advertising Production
Director
JANICE ROSENBLUM
Advertising Production
Coordinator
MAGGIE CHUN
National Advertising Director
JAY EISENBERG
(213) 467-2266
(For regional numbers, see right)
Corporate Ad Director
PAULA THORNTON
Subscriptions Director
IRENE GRADSTEIN
Vice President, Sales
JAMES GUSTAFSON
JULY 1989
ISSUE 74
Where to Write
All submissions should be sent to: ANALOG
Computing, P.O. Box 1413-M.O., Manchester, CT
06040-1413. All other editorial material (letters,
press release, etc.) should be sent to: Editor,
ANALOG Computing, 9171 Wilshire Blvd., Suite
300, Beverly Hills, CA 90210.
Correspondence regarding subscriptions, in-
cluding problems and changes of address, should
be sent to: ANALOG Computing, P.O. Box 16927,
North Hollywood, CA 91615, or call (818)
760-8983.
Correspondence concerning a regular column
should be sent to our editorial address, with the
name of the column included in the address.
We cannot reply to all letters in these pages,
so if you would like an answer, please enclose a
self-addressed, stamped envelope.
An incorrectly addressed letter can be delayed
as long as two weeks before reaching the proper
destination.
Advertising Sales
Address all advertising materials to:
Paula Thornton — Advertising Production
ANALOG Computing
9171 Wilshire Blvd., Suite 300
Beverly Hills, CA 90210.
Permissions
No portion of this magazine may be reproduced
in any form without written permission from the
publisher. Many programs are copyrighted and
not public domain.
Due, however, to many requests from Atari club
libraries and bulletin-board systems, our new poli-
cy allows club libraries or individually run BBSs
to make certain programs from ANALOG
Computing available during the month printed on
that issue's cover. For example, software from the
July issue can be made available July 1 .
This does not apply to programs which specifi-
cally state that they are not public domain and, thus,
are not for public distribution.
In addition, any programs used must state that
they are taken from ANALOG Computing Maga-
zine. For more information, contact ANALOG
Computing at (213) 858-7100, ext. 163.
Subscriptions
ANALOG Computing, P.O. Box 16927, North
Hollywood, CA 91615; (818) 760-8983. Payable
in U.S. funds only. U.S.: $28-one year, $54-two
years, $76-three years. Foreign: Add $10 per
year. For disk subscriptions, see the cards at the
back of this issue. . .
Authors
When submitting articles and programs, both
program listings and text should be provided in
printed and magnetic form, if possible. Typed or
printed text copy is mandatory, and should be in
upper- and lowercase with double spacing. If a sub-
mission is to be returned, please send a self-
addressed, stamped envelope.
For further information, write to ANALOG
Computing, P.O. Box 1413-MO, Manchester, CT
06040-1413.
JE Publishers Representative
6855 Santa Monica Blvd., Suite 200
Los Angeles, CA 90038
Los Angeles — (213) 467-2266
San Francisco — (415) 864-3252
Chicago — (312) 445-2489
Denver — (303) 595-4331
New York City — (212) 724-7767
JULY A.IM.A.L.O.Q. Computing
COM-DOS
Plus
I want you to know that I typed in and en-
joy using COM-DOS, which was featured in
your June 1988 issue. Unfortunately, this ver-
sion formats disks only in single density, and
I have a 1050 drive and like to use enhanced
density.
Through a fortunate error on my part, I
now have a version of COM-DOS that will,
to my great delight, format in enhanced den-
sity. Here is how it happened. In your July
1988 issue, there appeared a short binary pro-
gram called Boot Directory. I placed this on
my utility disk with DOS 2.5. I wanted to try
it out under COM-DOS, so I placed a disk
with COM-DOS on it in my drive and ran
Boot Directory, which was still in memory.
Since the disk operating system was DOS
2.5, the Boot Directory file rewrote DOS 2.5
to my COM-DOS disk; thus my COM-DOS
became enhanced. The DUP.SYS that accom-
panied COM-DOS works along with the en-
hanced version as if nothing happened. I was
shocked and surprised to see "999+ FREE
SECTORS" when I formatted a disk with
what I thought was my old version of COM-
DOS.
Thanks, ANALOG, for supplying the pro-
grams that make my computing more
enjoyable— even when I foul up.
—Ed Thoma
Georgetown, PA
A Plea
to Abacus
For quite some time I have wanted a FOR-
TRAN compiler for my 130XE. To my
knowledge one does not exist. Recently, I
came across an article about a company
called Abacus that sells a FORTRAN-64
compiler for the Commodore 64. I thought
that if such a compiler could be written for
a C-64, maybe one could be written for an
Atari 8-bit. The response from Abacus was
a very cold "we have never written anything
for the Ataris and never will." Perhaps if they
were to receive a truckload of letters from in-
terested Atari users, their attitude would
change. The address is 5370 52nd Street SE,
Grand Rapids, MI 49508.
-Bill Tart
Houston, TX
Actually, it 's not true that Abacus has never
written anything for Ataris. They don't have
any products for the 8-bit computers, true,
but they have an excellent set of books for
people who own STs.
The Dark Side
I am tired of the gloom and doom coming
from the pages of your magazine. I have just
read another article on the fine programs of
the "past." In the previous issues I have read
a few articles telling me of the hatred between
the users of the older line of computers and
the newer STs.
I am writing this letter using The Writer 's
Tool. This program helped me get through
JULY A.M.A.L.O.Q. Computing
COMMENT
college. I learned how to program by using
Atari BASIC and now use BASIC XL. I use
Chessmaster 2000 daily to stay ahead of my
fellow chess players. The list of great game
software is endless.
Because of Atari's computers, OSS's and
other third-party software, and books and
magazines such as yours, many of us are
more computer literate. I will be updating to
a more powerful computer soon, but I won't
quit using my Atari. Please keep the whin-
ing out of your editorials and keep up the
good work.
—Chuck Yates
Memphis, TN
Whining? Hey, we don 't make the world the
way it is, we just live in it. If you don 't want
us to talk about "old" software, (much of
which, I might add, is new to a majority of
our readers, since they haven't had their
computers that long), and there aren't any
new products to talk about, what software
should we cover? The large majority of let-
ters we get would also be classified as ' 'whin-
ing ' ' by you. The number of these letters tells
us that there's a problem out there, one that
ANALOG Computing surely didn't create.
The real questions are: Do we ignore the sit-
uation? Or do we report on it?
Double-sided
Disks?
Game Design
Fan
I was pleased to see the what and the how
of Atari's XF551 brought to light, but one
minor error caught my eye. In his review Mr.
Ratcliff attributes the XF551's inability to for-
mat double-sided disks to an intentional de-
sign consideration on Atari's part. Not so. As
the owner of an ATR8000 (remember those?),
I discovered long ago that standard drives will
not format disks without a timing hole (un-
like the 810 and 1050 drives, which use an
internal timer).
This proves once and for all that the XF551
does indeed use a standard mechanism, and
that the formatting limitation is not the result
of any kindheartedness by Atari. On the few
occasions when I've absolutely had to format
a double-sided disk, I've found it is indeed
a feasible, if somewhat dicey, proposition to
create a second index hole in the disk jacket
with a hole punch (taking care to line up the
puncher with the hole already in the disk
itself).
—Clay Halliwell
Springfield, MO
I have owned my Atari 800XL for about
three years, but I had owned an Atari 600XL
for about two years before that. When I got
these computers, I was interested in playing
and writing game programs. So when I saw
that ANALOG had the Game Design Work-
shop, I decided to check into it. I was in-
troduced to Player/Missile Graphics earlier,
but I only understood a small amount of it.
When I read GDW it answered a lot of ques-
tions I had.
GDW is helping me design my first BA-
SIC game, so please go back in your files and
bring out old articles that will help me bet-
ter understand my computer.
Also keep putting those wonderful game
programs in your magazine, no matter how
long they are. I love them.
—Dennis Debro
Birmingham, AL
We thank you for your kind words. Hope-
fully, many other readers also found the
Game Design Workshop to be a helpful
series.
JULY A.N.A.L.O.O. Computing
§
by Dave Arlington
Ever since the dawn of time (well, at least since the beginning of
Atari 8-bit computers), one of the most popular type of utility pro-
grams for the Atari has been the character set editor. Every Atari
magazine worth its salt has published at least one, and several com-
mercial ones have existed as well. One of the best was Create-
A-Font by Vince Erceg published here in analog a long while back.
Equal or exceeding in quantity are the programs that use redefined
character sets. In addition to using them in your own programs, many
public domain and commercial programs exist that employ them. The
result, for most Atari owners, is a vast collection of character sets— if
you're like me, you've ended up with a disk containing 40-50 different
fonts. To make things worse, many have confusing or similar names.
JULY A.M.A.L.Q.Q. Computing
I had fonts called STANDARD, ATARI, ROM, and DEFAULT that
I had a sneaking suspicion were all just the standard built-in Atari character
set. You might also have FANCY1, FANCY2, FANCY3 and FANCY4,
or maybe ARCHAIC, ANCIENT, ROMAN and ARABIC, all sounding
similar. continued on page 44
ARABIC
ABCDEFGHIJKLMMQPGRSTUVMHYZQI23 456 7 89
abcdefqhi jklwnopgrstuvwxyz
BLOCK ~~
ABCPfif OH1JK1HWOPORSIUVMKYZ0123456789
abcdef«jhi jkimioi><tt'stMvwxyz
hC JEO EFCUJI LM CFGFSTLl ^/ , . ICi2345E-£9
dfacde fgh i jk lfrsppgrstuv^xyz
[hhi III T I1L — '
HBDBEFGHI J KL rtHQPQftS T IKIUKVOT I ttUBhV&H
abcdefghi jkiwnopgrstuvwxyz
HBGQEFGH i J Hi t1NQPqB5TlHJl4H¥ZD 1 SSUS&Pfl^
abcdefghjifi Mfigpgrstmjwx*jz
START
/Triqqer to Quit
JULY A.IM.A.L.O.Q. Computing
A few weeks ago I was watching Nova
on public television. The program
was about chaos; no, it was not about
freeways or politics, but about the
chaos that is being discovered in
physics. Many physical events, which were
once thought to be governed precisely by ele-
gant mathematical formulas, are now seen to
contain chaotic events. But before I get into
the physics of planetary motions or some-
for 24 hours or so.
One would expect that once the dots got
within the triangle, all the rest of the dots
would stay inside the triangle (true), and that
eventually the area inside the triangle would
be solidly filled with dots (not true).
I thought this was interesting, but had no
desire to spend 24 hours to find out. I there-
fore turned to my trusty 130XE to do the
work for me. After a little bit of thought, I
CHAOS
by Alfredo L Acosta
thing, I'd best get back to the program.
The first example of this chaos was in the
form of a game. A person was to take a sheet
of paper and put three dots on it in the shape
of a triangle. These points would be num-
bered 1,2 and 3,4 and 5,6. Then a new point
on the sheet would be randomly selected and
a dot placed there. The person would then
roll a single die. Let's assume that the num-
ber rolled was 4. A new dot would then be
placed one-half the distance between our last
dot and triangle corner 3,4. The die would
then be rolled again and yet another dot
would be generated from our new point.
These dots would be continually generated
figured out a way to accomplish this in BA-
SIC. After a little more thought and ex-
perimentation with the computer, I came up
with the main routine of the program. I then
dressed it up a bit with an informational
screen and a screen dump. Short and simple.
I hope you all enjoy this little program.
While you watch the points being plotted,
consider at what you are looking: order out
of chaos!
Alfredo L. Acosta is a biologist working for
the state of California. He has been program-
ming for about six years.
continued on page 57
JULY A.M.A.L.D.G. Computing
NEWS
HUTOMKTgD TiLLlH PKOOHRM
»*^ 1 L H^FHTFI 1
eh" r""*— i
-•^■■L,
—
"^^W|fT3
~
MrUlt Oi I'll'. 1 I P M.i Mill',
1 ll« fill |«4 ; i | u 1 1 : |»H 1 T 1 : i"»i*,t ' 1 1 I |
N ! i i
III-! 1 ' 1 ' 1 ! MM 1 1
■
■
J"
miii 1/1/89 JJ $0.00
m
m
— «
]
1
1 M.I' (VI! 'DM |.i: | ! lli'.'i: ) i Mi"
■
:„.::"
H
1
New Home Productivity
Software
JVB Software has released Laserteller, an
all-in-one program that includes the ability
to handle a checking and savings account, as
well as keep an on-disk note and address
book. Modeled after ATMs (automatic teller
machines), the program allows you to quickly
handle checking transactions. It also includes
a "core" version of the program that lets you
enter deposits and withdrawals, or check
previous entries, without having to load the
entire program.
Laserteller s graphics are unusual for a
home-productivity program, with each screen
looking like a futuristic ATM. The program
sells for $14.95 plus $2.50 shipping and
handling.
JVB Software
6538 Hazeltine Avenue
Van Nuys, CA 91401
CIRCLE #111 ON READER SERVICE CARD.
JULY A.IM.A.L.O.Q. Computing
NEWS
BBS Listing
Now available from Bubeck Publishing is
the 7959 BBS Bible, a comprehensive listing
of almost 5,000 bulletin-board systems through-
out the country. According to Bubeck Pub-
lishing, "The goal of the 1989 BBS Bible is
to make BBSs more accessible, both to those
who already use them and those who have
a computer and a modem but haven't yet con-
tacted any. There is no other such publica-
tion available today."
Also included in the book are articles on
accessing BBSs, low-cost long-distance ser-
vices, modems, computer viruses and other
topics.
The BBS Bible will be updated annually
and is available for $24.95 plus $3 shipping
and handling. (Pennsylvania residents must
add $1.68 sales tax.)
Bubeck Publishing
P.O. Box 104
Collegeville, PA 19426
(215) 287-6356
CIRCLE #112 ON READER SERVICE CARD.
More No Frills
No Frills software has just released their
second program for the Atari 8-bit computers.
Called PS Users Utility Disk, the package not
only includes various utility programs for use
with Print Shop, but also two complete print-
ing utilities for creating labels, bookmarks
and coupons.
Some of the Print Shop utilities include an
icon viewer, which can load up to four icons
at a time; an icon cataloger, which will print
icons to Epson- and Prowriter-compatible
printers; a font cataloger; a border cataloger;
and a utility to delete, undelete or rename
Print Shop files.
The PS Users Utility Disk sells for $29.95
plus $2.00 shipping.
No Frills Software
800 East 23rd Street
Kearney, Nebraska 68847 (308) 234-6250
CIRCLE #113 ON READER SERVICE CARD.
APX Program Now Shareware
Mastermatch, a board game requiring logic
and concentration, was originally released by
the now-defunct Atari Program Exchange
(APX). This program, which is a version of
the popular puzzle game, Mastermind, origi-
nally sold for $24.95. It has now been given
an extensive upgrade and is available as
shareware.
Anyone interested in obtaining this pro-
gram, along with complete documentation
should contact Chuck Mullally at the address
given below. Note that, because it is share-
ware, this program may be copied and free-
ly distributed, though the author requests a
$10 donation from anyone who enjoys the
program and who would like the complete
documentation.
Chuck Mullally
2925 Scenic Drive
Muskegon, MI 49445
CIRCLE #114 ON READER SERVICE CARD.
JULY A.N.A.L.O.G. Compucing
13
by Frank Cohen
DRAM Solutions
"The DRAM crisis is over," said Sam
Tramiel, president of Atari Corp, at last fall's
COMDEX computer trade show in Las Ve-
gas, Nevada. The limited supply of ST com-
puters in the U.S. has been linked to a
worldwide shortage of memory chips, Dy-
namic Random Access Memory (DRAM)
chips. The ST depends on large numbers of
these special high-capacity memory chips.
American protectionist legislature and sup-
ply restrictions by the Japanese electronics
cartel MITI caused a worldwide shortage of
DRAM chips in 1988. The result was a 500%
increase in DRAM chip prices, and the limit-
ed availability of STs in the US.
The solution to Atari's supply problems
seems to have been worked out. Tramiel told
of three contracts with major DRAM-chip
manufacturers to insure an adequate supply
of memory chips during 1989. Unfortunate-
ly, this does not lower the price of DRAM
chips; it only insures availability.
520ST owners have been stunned to find
the economic reality of the DRAM crisis.
DRAM prices have put several ST computer
memory-board-expansion manufacturers out
of the market. E. Arthur Brown Company,
formerly the manufacturer of a two- and four-
megabyte expansion board for the 520 and
1040 ST, discontinued their memory board
because of the limited availability of DRAM
chips. Brown also noted that the high price
kept customers from taking the plunge.
One solution to the DRAM crisis is to use
surplus DRAM chips, which are found in
close-out lots from chip manufacturers, re-
moved from old computers, and taken from
faulty memory boards. Although surplus
DRAMs are not as reliable as new guaran-
teed chips, yields of good chips make up for
the time and effort required to get the sur-
plus chips. California Development Labs has
developed a portable DRAM-chip tester for
this purpose.
The RT1 is a hand-held battery-powered
DRAM-chip tester that weighs less than one
pound. A nine- volt Alkaline battery powers
the unit. Inside the RT1 is a microcomputer
system that can test and find faulty DRAM
chips.
Some DRAM-chip suppliers have become
sneaky. You might find a DRAM chip marked
as a 256K chip, when in reality it is a 65K
chip. The RT1 identifies all types of 64K,
256K and one-megabyte DRAM chips, in-
dicating the chip's actual internal configura-
tion on several LED indicators.
JULY A.N.A.L.O.G. Computing
Use of the MIDI
ports for LAN
transmissions is
attractive
because of the
low cost of
MIDI cables.
However, there
are additional
ports which
might result in
faster LAN data
transmission.
The RT1 is easy to use. Just plug a DRAM
chip into the RT1 socket and press TEST. An
audible alarm and a couple of LED indica-
tors tell you within five seconds if the DRAM
chip is good or bad.
California Design Labs
18323 Parthenia Place
Northridge, CA 91325
(818) 885-0058
Local Area ST
Atari continues to call the ST a business
machine, and the rest of the world ignores
it. Why is Atari's claim of the ST as a busi-
ness machine taken so lightly? Because the
ST lacks two vital ingredients: expansion
slots and local area networking (LAN). The
IBM PC is virtually swimming in expansion
boards that add extra memory, hard-disk con-
trollers, and other external hardware expan-
sion boxes. Now consider for a moment that
the most popular hardware expansion for the
ST is a monitor A-B switch box and a bag
of springs to stiffen the keyboard.
LAN provides a seamless interface be-
tween several computers. To the computer
user, a distant computer's hard disk appears
as just another device on the user's desktop.
When a file is read, the LAN sends and
receives messages across a transmission line
between the two computers. LAN software
patches itself into the deepest part of the oper-
ating system, so it works transparently with
all applications, such as word processors,
spreadsheets, databases, etc.
Several attempts have been made at creat-
ing a LAN for the ST computer. John Demar
of QMI began writing ST NET in 1985.
DeMar's system used the MIDI ports to
communicate information between ST sys-
tems. From the GEM Desktop, a floppy dis-
kette appeared as another disk icon on a
networked system. If completed, ST NET
would have become the most popular net-
working system. ST NET has not been com-
pleted due to several technical constraints.
DeMar found himself trying to pry open
an operating system locked into read-only
memory (ROM). The TOS operating system
was not designed with a LAN in mind, so
patching TOS is a very complicated matter.
The second difficulty was in using the
MIDI ports as a communication system.
DeMar found the transmission time to be too
slow. MIDI transmits data at 31.5 thousand
bits per second. When transmitting a file of
10,000 bytes, STNETtook more than 40 sec-
onds to complete the transmission. This
might not seem very slow, but a file copy
function of 10,000 bytes takes less than five
seconds to complete.
A new version of TOS, the ST's ROM-
based operating system, has recently been
released to ST developers. DeMar is once
again looking into the operating system to see
if a software-based LAN can be created us-
ing the new TOS. If the software can be creat-
ed, the only other obstacle will be the
physical connection between ST computers.
Use of the MIDI ports for LAN transmis-
sions is attractive because of the low cost of
MIDI cables and not having to build a hard-
ware interface board for the ST. Just plug two
$5 MIDI cables between two or more STs and
you have a LAN. However, there are addi-
tional ports which might result in faster LAN
data transmission.
The ST floppy-disk drives are serviced by
a high-speed floppy-disk-drive controller.
Data transmission rates go up to 32 microsec-
onds per byte across the floppy-disk-drive
cables, about 1,000 times faster than the
MIDI ports. The ST floppy-disk controller
chip is also much more reliable than the
MIDI port controller in data transmission.
The idea of using the floppy-disk controller
as a LAN manager is a practical one. The
data rate is high enough to be competitive
with MS-DOS LAN systems, and the soft-
ware should be straightforward.
Frank Cohen has been developing Atari pro-
grams since his first commercial product, Clowns
& Balloons. He later developed Regent Base,
an SQL 4GL database, and is currently in-
volved with several other ST-related produc-
tivity and small business software packages.
You may contact Frank directly on Compu-
Serve (76004J573) or Genie (FRANK.COHEN). CI
JULY A.IM.A.L.O.Q. Computing
ASTER
by Bryan Schappel & Barry Kolbe
Have you ever had the urge to snoop
around your disks? To see how files
are stored on a disk? Or, to try to
cheat at your favorite text adventure?
Did you ever want to disassemble
a few disk sectors or a file that you could not
load into memory? If you would like to do
these things then Disk Master is for you!
Disk Master (DM) is actually two pro-
grams in one. The editor allows you to exam-
ine and edit any sector on a single-density or
1050 double-density disk. The disassembler
allows you to disassemble sectors or files
(with or without labels) and send the output
to the screen, printer or a disk.
Typing It In
Type DM (Listing 1) using the M/L Edi-
tor found elsewhere in this issue. Use the bi-
nary load option of your DOS to load and run
DM. It would be best to remove any car-
tridges and/or disable BASIC on XL/XE
models.
The Disk Editor
As you will see, the screen is divided into
two sections: a section that is filled with num-
bers and a section filled with characters. This
area displays all the data in one disk sector.
There are 128 bytes in each sector-
numbered from to 127 (00-7F in hexa-
decimal). The left margin and the top of the
screen have guide numbers to cross-reference
the data. When you begin, the buffer that
holds sector data is full of 0s, which you will
see as hexadecimal 00s. To the right of the
data is an 8 by 16 array of hearts. These are
the ATASCII equivalents of those 0s. Below
is information about the sector:
SEC: This is the current sector number dis-
played in hexadecimal.
FIL: This is the DOS 2.x file number. The
file number ranges from 0-3F, for a maxi-
mum of 64 files per disk.
LNK: This is the DOS sector link. This
number is the pointer to the next data sector
in a file. This number is invalid on a boot
disk (such as a game) and the directory
sectors.
BYT: This number tells DOS how many
bytes of actual data are contained in the sec-
tor. This number typically ranges between
and 125.
SRC: This is the source drive that DM uses
to read all data from while in the editor.
DST: This is the destination drive that DM
will write all information to. Note: The
source and destination may be different; this
allows users with multiple-drive systems to
read from one disk and write to another.
INP: This tells you how your input will be
interpreted. If the flag is set to "H," all in-
put will be interpreted as hex strings; other-
wise the input will be interpreted as character
strings.
What is a hex string? Well, a hex string is
simply input that is made up of hexadecimal
digits that represent ATASCII characters. For
example, the hex string "414243" is the same
as the character string "ABC."
So, why do we use hex strings? Because,
a hex string allows you to enter characters that
you normally can't, like the EOL (ATASCII
155, $9B) and the delete keys. You will find
a use for hex strings when you want to search
for data on a disk.
A note on hex string interpretation: As you
may have noticed, it takes two hex digits to
represent one character, so what happens if
you enter an odd number of digits? Well, an
extra is added to the beginning of your in-
put, so, "1FE" becomes "01FE." We felt that
this was the natural way to interpret the hex
string.
DNS: This shows you which density the
program is operating in. A 1 indicates sin-
gle density, and a 2 indicates 1050 double
density.
You may activate a built-in help screen by
pressing the "?" (use Shift-/). The help
screen lists all of the command keys along
JULY A.IM.A.L.O.B. Computing
with their associated function. Here is a brief
description of each command.
Read a sector (R): Pressing "R" allows you
to enter a sector number for DM to read into
its memory buffers. This number may range
from 1-2D0 in single density and 1-410 in
1050 double density. Simply press Return to
reread the current sector.
Up one sector (+): This will increase the
current sector number by 1 and read it into
memory. If you are on the last sector of the
disk, DM will keep reading it.
Down one sector (-): This reads in the sec-
tor before the one you're on. You may not
read Sector Zero.
Edit sector (E): The edit routine requires
two pieces of information: the starting byte
and the new data. At the EDTB prompt, enter
the starting byte number of the edit, and at
the EDTD prompt, enter the data.
The data will be entered according to the
INP flag. Additionally, character strings will
be converted to either internal code or ATAS-
CII depending on the setting of the charac-
ter display mode (see the C command).
Write sector buffer (W): You are asked for
the sector number to write the sector to, or
you may press Return for the current sector.
You are asked if you are sure before the write
occurs; pressing Escape or "N" will abort.
If you write the buffer to the current sector
you may use Undo to restore the buffer and
rewrite the buffer back to disk. If you used
a different sector number you cannot restore
the sector's original contents.
Undo (U): This restores the sector buffer
contents to what they were when the sector
was first read.
Number Base (N): This allows you to
change the number base that is used to dis-
play the sector data. The default mode is
hexadecimal— pressing this key toggles be-
tween hex and decimal.
Decimal numbers are displayed using only
two digits. If the left digit is inversed, then
add 200 to the number displayed. If the right
JULY A.IM.A.L.O.Q. Computing
If you write the
buffer to the
current sector
you may use
Undo to restore
the buffer and
rewrite the
buffer back to
disk.
digit is inversed, add 100 to the displayed
number. If no digits are inversed, then the
number on screen is the actual value.
Character Display (C): This toggles the
character display array from ATASCII to in-
ternal code. The setting of this array is used
to interpret your character-string input dur-
ing searches and edits.
Block fill (B): This command fills the sec-
tor buffer with a hex byte, just enter the value
and, wham!, the buffer is filled. (Excellent
for erasing sectors; just use the value 00.)
Exclusive OR sector contents (J): This will
perform a binary EOR on every byte in the
sector with a value that you supply. This can
be useful when some data has been encrypt-
ed in a sector. To recover from an EOR, just
perform the EOR again with the same value.
Trace link (T): This will read in the sector
pointed to by the LNK field. Use this com-
mand to follow a disk file.
New file number (F): This allows you to
change the file number on the current sec-
tor. You are asked for the new file number;
remember that only values 0-3F are allowed.
You will receive an Error 181 if the value is
out of range.
New sector link (L): This allows you to
change the sector link on the current sector.
Only values 0-2D0 (single) and 0-410 (dou-
ble) are allowed. An Error 180 will be given
if the new link is out of range.
Density toggle (V): Pressing "V" toggles
between single and 1050 density. Having this
set incorrectly cannot damage your disks in
any way.
Main menu (M): This command just
returns you to the main menu allowing you
to enter the disassembler or exit to DOS.
Search for data (S): This command
searches the current sector for data you enter.
Remember that your input will be interpret-
ed according to the INP flag. If the data that
you are searching for is found, a "<" is
placed on the screen at the beginning of each
occurrence. This command only examines
the current sector, so if you want to search
another sector for the same data, just read
in that sector and hit Return at the SRCH
prompt. You may also want to clear the screen
before doing another search (use Control-
Clear to redraw the screen).
Hex to decimal (H): This converts a hexa-
decimal number to its decimal equivalent.
Only values of 0-FFFF are allowed.
Decimal to hex (.): This converts a decimal
number to its hex counterpart. Only values
continued on page 27
17
"IB
JULY A.IM.A.L.O.B. Computing
. .. h,';il>
mwwm>.<- W&W4 msn^m^ w^m^- -,
ri^vA^'>' '■ ' v'/^7. /*.,;/!■.-;/ ^vf'^Lv/ 1 . ■'■■ V- ■ >„■ ' '■ \K> ■ ? ■ .■■■ .i. V '
»«J9EFi«£v a"V ■;<>&•■ • e%\'*l'-$ V'fr/P', riJv-5:'' -•■ %■ ■' ■.;.?,-■■ ■■...:■
i ■/$>. '>/*■ '',- 'm'vi'v 4? 'I?:j. l-'W , ,4 , * ; .',<•■..•;- •. ■ ■ g . ;'■■■'
M^&^ir •IfsHk- .^^.tf :■>.■■■< . , .-;;-;>.;;,•;
W^^W:^' ■ ■■ ' :/i ',■>■*■ ' : - ■ ?/-v.r;-r.{,;: v .. *, /, ; s.
./>',', ill!.- •'•* v.;- .,!,, ., '-,•,■, ,.;.*-: ■ ' >M ', ■ , '■. •'.;.'•",• .-■■"•"'
The Atari ST can do some pretty amazing things. But many of us
still cling to our faithful 8-bit machines, not wanting to give up
such a good friend despite the enticements of the powerful, graphic-
ally exquisite Atari ST. Still we are curious. How can we get a
peek at what the ST can do without purchasing one, or going to
the local dealer (if that is even remotely possible) to peruse their wares,
or reading about it in one of those ST magazines that we don't usually
purchase?
DEGAS View (the first word is pronounced day-GAH) brings the ST's
highest-resolution graphics capabilities to the Atari 8-bit machines, without
dropping a single bit.
DEGAS by Tom Hudson is the most popular graphics art package for
the Atari ST. With it, art work can be created in 320 by 200 pixels with
16 colors, 640 by 200 with four colors, or 640 by 400 with two colors.
This last mode is similar to graphics mode 24 (8 + 16) on the 8-bits, which
is 320 by 192 with two colors. If we were to load up a DEGAS high-
resolution graphic and throw away every other pixel horizontally and
every other scan line, or three-fourths of the image, we could display
part of a DEGAS picture on a graphics 24 screen.
JULY A.N.A.L.O.Q. Computing
13
What if we didn't throw any of the picture
away, but split it into four separate pages?
Each page could be stashed in a separate bank
of memory on a 130XE (or compatibly ex-
panded 800XL, 65XE or XEGS). Then we
could simply flip through the four pages as
fast as possible, to create a continuous im-
age that appeared to be 640 by 400.
This is what DEGAS View does. It will load
uncompressed DEGAS high-resolution
(monochrome, as they are sometimes called)
pictures, sort them into separate memory
banks, and display the banks with a technique
referred to as page flipping.
Where can you find DEGAS files? I have
accumulated some DEGAS pictures in this
format and placed them in the Koala pictures
database on DELPHI in the Atari 8-bit area.
Typing It In
Listing 1 is the data needed to create your
copy of DEGAS View. Type this data using
the MIL Editor, found elsewhere in this is-
sue, creating the file under the name
DEGASVUF.OBJ. Listings 2 3 and 4 are the
MAC/65 source code for DEGAS View. These
listings do not need to be typed; they are
provided only for those people interested in
assembly language programming.
Using the Program
Load DEGASVUEOBJ from DOS. No ex-
ternal cartridges should be installed, and in-
ternal BASIC should be disabled. When run,
DEGAS View first prompts for a drive num-
ber. Simply press Return to accept the default
of 1, or type the drive number and press
Return. A directory of all files with an ex-
tender of ,PI3, the standard for all DEGAS
high-resolution picture files, will be listed to
the display. Press Escape twice and then
Return to abort the program and return to
DOS. Press Return only to enter a new drive
number.
Type the name of the DEGAS file you wish
to view and press Return. There is no need
to specify the drive number or extender, if
the current default drive and extender (.PI3)
are valid. If the file is not found, or a load
error occurs, the problem is detected and DE-
GAS View will restart.
DEGAS View will immediately begin load-
ing the picture file. It will perform the neces-
sary bank switching as the information is
decoded and displayed. There will be "snow"
on the display as data is fetched from disk.
This will not cause any problems, however.
When the file has been completely load-
ed, the display routine is activated. Sixty
times a second, after each vertical blank in-
terrupt (VBI), one of the four pages is dis-
played. This results in a 640 by 400 display
fifteen times a second. The image will flick-
er, but your eyes will "average" the informa-
tion and see a complete picture. At this point
several key commands will allow you to ex-
periment with the display.
Sometimes the image will appear to be a
"negative." When this happens, press the
space bar, which toggles between a normal
and inverted display.
To see the individual components of this
four-part image, press one of the number keys
1 through 4. Each number key will select the
associated page and display it without any
screen flipping. By rapidly typing the keys
in sequence it can be seen how the pages fit
together to create a high-resolution image.
Sometimes only half of the image will be
enough resolution to see the whole picture.
Press the H key to see half the data. This will
cause DEGAS View to flip through pages 1
and 3 only, resulting in an effective display
is completely drawn by the display hardware.
These "interruptions" will create a snow ef-
fect, similar to poor TV reception. This ef-
fect can be more annoying than the flicker.
To exit the fast display mode, or any of the
static screen displays, press the N key. This
returns to the normal display of all four
screens at the normal rate. This does not reset
the inverted mode, if it has been enabled.
Press the Escape key to exit DEGAS View
and return to DOS. Any other key press will
restart the program, allowing you to load and
display another picture.
If you do not have a 130XE or expanded-
memory XL machine, you may still use DE-
GAS View. The effects of memory bank
switching will be ignored by the computer,
if it does not support it. The end result will
be a display of one-fourth the original image.
This allows any Atari 8-bit owner to take a
look at DEGAS pictures.
DEGAS View is not an ST emulator, but it
does a pretty fair job of presenting full -screen
Atari ST graphics on an 8-bit macm'ne. Tk<sre
are possibilities for DEGAS View enhance-
ments. It could be modified to save any one
page to disk as a simple graphics-mode-8
screen dump. It could be updated to load mul-
tiple 8-bit screens and save them as a com-
posite DEGAS image, allowing you to send
DEGAS View is not an silt
rX- >P
..('•V v'-\ ■ '-i«
resenting
is not aniji
es a :prettwt^i^/0f0
rate of 30 times per second. This noticeably
reduces the flicker. Press the S key to see the
other half of the data, screens 2 and 4, in the
same manner. Try alternating between S and
H keys, to see which display pair looks best.
To get a better idea of what the complete
image would look like, flicker free, press the
F key. In this mode DEGAS View will flip
through all four pages as fast as possible.
This will result in page flipping before each
your best 8-bit graphics to ST-owning friends.
If ANALOG receives sufficient reader re-
quests for new DEGAS View features, I will
gladly consider upgrading this program for
a future issue of ANALOG.
Matthew Ratcliffis definitely an Atari ' 'old-
timer. ' ' He has been writing about Atari com-
puters for as long as we can remember and
recently celebrated his one-hundredth arti-
cle sale. He lives in Missouri.
JULY A.N.A.L.O.G. Computing
LISTING 1: MIL EDITOR DATA
10OO DATA 255,255,2,58,58,58,83,58,155
,8,72,162,96,169,12,157,4883
1818 DATA 66,3,32,86,228,162,96,169,3,
157,66,3,169,2,157,68,3685
1028 DATA 3,169,58,157,69,3,184,157,75
,3,41,248,73,16,9,12,22
1838 DATA 157,74,3,32,86,228,96,211,58
,215,58,112,48,79,8,64,2878
1848 DATA 59,51,61,51,79,8,88,161,51,1
56,52,65,211,50,8,8,645
1058 DATA 0,0,68,49,58,78,73,76,69,78,
65,77,69,46,69,88,383
1868 DATA 84,155,8,68,49,58,42,46,88,7
3,51,155,8,162,8,169,1824
1878 DATA 15,157,216,58,232,224,99,288
,248,162,0,157,62,51,232,224,1428
1080 DATA 99,208,248,169,0,32,6,50,169
,0,141,198,2,162,16,169,4335
1090 DATA 12,157,66,3,32,86,228,76,21,
52,168,196,229,231,225,243,2881
1188 DATA 168,214,233,229,247,172,168,
194,249,168,285,225,244,178,210,225,93
48
1118 DATA 244,172,168,168,227,169,160,
193,238,225,236,239,231,160,155,162,76
79
1120 DATA 0,169,9,157,66,3,169,240,157
,68,3,169,51,157,69,3,3662
1130 DATA 169,37,157,72,3,169,0,157,73
,3,32,86,228,162,0,169,4424
1140 DATA 9,157,66,3,169,185,157,68,3,
169,51,157,69,3,169,255,6987
1150 DATA 157,72,3,169,0,157,73,3,32,8
6,228,76,121,52,91,82,3159
1168 DATA 69,84,85,82,78,93,32,61,32,7
5,181,101,112,32,100,101,2021
1170 DATA 102,97,117,108,116,32,115,10
4,111,119,118,32,97,98,111,118,4627
1188 DATA 181,46,155,162,0,169,9,157,6
6,3,169,84,157,68,3,169,4052
1190 DATA 52,157,69,3,169,37,157,72,3,
169,8,157,73,3,32,86,965
1200 DATA 228,76,188,52,68,114,185,157
,52,152,53,118,181,32,35,32,2152
1210 DATA 68,181,103,97,115,32,46,88,7
3,51,32,102,105,108,181,115,2881
1228 DATA 32,97,114,101,32,111,110,32,
63,155,162,0,169,9,157,66,3677
1230 DATA 3,169,154,157,68,3,169,52,15
7,69,3,169,34,157,72,3,2550
1240 DATA 169,0,157,73,3,32,86,228,162
,0,169,5,157,66,3,169,3896
1250 DATA 0,157,68,3,169,4,157,69,3,16
9,2,157,72,3,169,0,1436
1260 DATA 157,73,3,32,86,228,173,0,4,2
01,155,240,3,141,186,51,6959
1278 DATA 162,16,169,3,157,66,3,169,6,
157,74,3,169,0,157,75,2763
1288 DATA 3,169,185,157,68,3,169,51,15
7,69,3,32,86,228,152,48,4631
1298 DATA 66,162,16,169,5,157,66,3,169
,0,157,68,3,169,4,157,2898
1300 DATA 69,3,169,255,157,72,3,169,0,
157,73,3,32,86,228,152,5373
1310 DATA 48,33,162,8,169,9,157,66,3,1
69,0,157,68,3,169,4,1562
1320 DATA 157,69,3,169,255,157,72,3,16
9,0,157,73,3,32,86,228,4594
1330 DATA 76,35,53,162,16,169,12,157,6
6,3,32,86,228,76,138,53,3671
1348 DATA 71,114,97,112,184,105,99,115
,32,182,105,108,101,32,116,111,4177
1358 DATA 32,108,111,97,180,32,63,155,
162,0,169,9,157,66,3,169,3831
1368 DATA 114,157,68,3,169,53,157,153,
53,148,54,69,3,169,24,157,4146
1370 DATA 72,3,169,0,157,73,3,32,86,22
8,76,201,53,91,82,69,4054
1388 DATA 84,85,82,78,93,32,61,32,82,1
01,115,116,97,114,116,44,3238
1398 DATA 32,110,101,119,32,100,114,10
5,118,181,155,162,8,169,9,157,5553
1400 DATA 66,3,169,171,157,68,3,169,53
,157,69,3,169,38,157,72,4195
1418 DATA 3,169,0,157,73,3,32,86,228,7
6,11,54,68,111,117,98,3816
1420 DATA 108,101,32,91,69,83,67,93,32
,97,118,100,32,91,82,69,1938
1430 DATA 84,85,82,78,93,32,181,120,10
5,116,115,46,155,162,0,169,5475
1440 DATA 9,157,66,3,169,234,157,68,3,
169,53,157,69,3,169,33,4051
1458 DATA 157,72,3,169,0,157,73,3,32,8
6,228,162,8,169,5,157,4466
1460 DATA 66,3,169,0,157,68,3,169,4,15
7,69,3,169,128,157,72,4502
1470 DATA 3,169,0,157,73,3,32,86,228,1
62,16,169,12,157,66,3,3802
1480 DATA 32,86,228,173,8,4,201,27,240
,7,201,155,208,64,76,217,9220
1498 DATA 51,169,8,32,6,50,76,125,54,6
8,181,183,97,115,32,86,2189
1588 DATA 185,101,119,32,98,121,32,77,
97,116,42,82,97,116,155,162,5629
1518 DATA 8,169,9,157,66,3,169,103,157
,68,3,169,54,157,69,3,2995
1528 DATA 169,22,157,72,3,169,8,149,54
,144,55,157,73,3,32,86,1975
1538 DATA 228,96,173,8,4,162,8,168,8,1
48,1,50,201,58,248,25,4177
1548 DATA 173,1,4,281,58,248,18,169,68
,141,168,51,173,186,51,141,8895
1558 DATA 169,51,169,58,141,170,51,160
,3,189,8,4,153,168,51,232,6785
1568 DATA 200,201,155,240,10,201,46,20
8,240,238,1,58,76,195,54,173,9276
1578 DATA 1,58,288,38,136,169,46,153,1
68,51,280,169,88,153,168,51,8423
1580 DATA 200,169,73,153,168,51,288,16
9,51,153,168,51,288,169,155,153,1835
1598 DATA 168,51,162,8,169,9,157,66,3,
169,168,157,68,3,169,51,4598
1688 DATA 157,69,3,169,255,157,72,3,16
9,8,157,73,3,32,86,228,4874
1618 DATA 162,16,169,3,157,66,3,169,4,
157,74,3,169,8,157,75,3885
1620 DATA 3,169,168,157,68,3,169,51,15
7,69,3,32,86,228,152,16,4408
1638 DATA 71,76,87,55,78,185,188,181,3
2,181,114,114,111,114,44,32,3889
1648 DATA 112,114,181,115,115,32,82,69
,84,85,82,78,155,162,0,169,5067
1650 DATA 9,157,66,3,169,62,157,68,3,1
69,55,157,69,3,169,25,3123
1668 DATA 157,72,3,169,8,157,73,3,32,8
6,228,169,255,285,252,2,9884
1678 DATA 248,251,141,252,2,76,217,51,
169,24,32,6,58,169,211,162,7194
1688 DATA 58, 164, 20, 196, 20, 240, 252, 145
,55,140,56,141,48,2,142,49,5135
1690 DATA 2,169,0,133,88,169,64,133,89
,169,288,141,8,58,162,16,5297
1788 DATA 169,7,157,66,3,169,51,157,68
,3,169,58,157,69,3,169,4117
1718 DATA 34,157,72,3,169,8,157,73,3,3
2,86,228,152,16,68,162,4535
JULY A.IM.A.L.O.B. Computing
1720 DATA 16,169,12,157,66,3,32,86,228
,169,0,32,6,58,76,226,3658
1738 DATA 55,76,79,65,68,32,69,82,82,7
9,82,155,162,0,169,9,3188
1740 DATA 157,66,3,169,215,157,68,3,16
9,55,157,69,3,169,11,157,4939
1750 DATA 72,3,169,0,157,73,3,32,86,22
8,96,165,88,133,224,165,8931
1768 DATA 89,133,225,169,10,141,198,2,
169,0,141,197,2,169,4,141,5908
1778 DATA 200,2,162,16,169,7,157,66,3,
169,51,157,68,3,169,50,3461
1780 DATA 157,69,3,169,160,157,72,3,16
9,0,157,73,3,32,86,228,4579
1798 DATA 152,16,71,162,241,142,1,211,
169,0,32,6,50,162,16,169,4394
180O DATA 12,157,66,3,32,86,228,76,97,
56,76,105,108,101,32,105,3657
1810 DATA 110,112,117,116,32,101,114,1
14,111,114,155,162,0,169,9,157,6236
1820 DATA 66,3,169,80,157,68,3,169,56,
157,69,3,169,17,157,72,4096
1838 DATA 3,169,0,157,73,3,32,86,228,9
6,162,0,189,51,50,160,5369
1840 DATA 4,24,42,38,226,42,38,141,56,
136,57,227,136,208,247,24,8930
1850 DATA 160,4,189,131,50,42,38,228,4
2,38,229,136,268,247,232,189,3276
I860 DATA 51,50,160,4,24,42,38,226,42,
CLSN Pascal
for the Atari 130XE
o Editor and compiler are
all in one complete,
integrated programming
environment - No program
swapping
o Compiles at 1000 lines per
minute
o Generates 6502 machine
code, not pseudo code
o Programs can be compiled
and run from memory, or
stored to disk and run on
their own
o Arrays, records, files,
and sets are all supported
o Recursion and dynamic
memory allocation are
supported
o Interface to machine
language subroutines
o 48k of code, 48k of
dynamic memory, and a 16k
stack are available
o Demonstration programs
included
To order, send $39.95 to:
CLSN Software
10 Arlington Place
Kearny, NJ 07032
N'J residents, add 6* sales tax, Canadian
residents add $5.00 shipping and handling
CIRCLE #107 ON READER SERVICE CARD.
38,227,136,208,247,168,4,8466
1870 DATA 24,189,131,50,10,38,228,10,3
8,229,136,208,247,134,230,162,2572
1880 DATA 193,142,1,211,165,226,145,22
4,162,241,142,1,211,145,224,162,4359
1890 DATA 197,142,1,211,165,227,145,22
4,162,201,142,1,211,165,228,145,4047
1908 DATA 224,162,205,142,1,211,165,22
9,145,224,230,224,208,2,230,225,6434
1910 DATA 166,230,232,224,80,240,3,76,
136,56,206,0,50,240,18,173,7641
1920 DATA 0,50,201,100,208,8,169,0,133
,224,169,88,133,225,76,24,7953
1930 DATA 56,162,16,169,12,157,66,3,32
,86,228,162,193,168,48,165,8231
1940 DATA 20,197,20,240,252,142,1,211,
148,212,50,232,232,232,232,224,7223
1950 DATA 201,208,2,160,64,173,252,2,2
01,255,208,6,224,209,240,219,6612
1960 DATA 208,221,162,241,142,1,211,16
2,64,169,12,157,66,3,32,86,4587
1970 DATA 228,162,64,169,3,157,66,3,16
9,4,157,74,3,169,0,157,3926
1980 DATA 75,3,76,106,57,75,58,8,169,1
83,157,68,3,169,57,157,4720
1990 DATA 69,3,32,86,228,152,16,13,162
,64,169,12,157,66,3,32,2396
2000 DATA 86,228,76,217,51,162,64,137,
57,132,58,169,7,157,66,3,4235
2010 DATA 169,0,157,68,3,169,4,157,69,
3,169,1,157,72,3,169,3555
2020 DATA 0,157,73,3,32,86,228,173,0,4
,201,32,208,3,76,90,4182
203O DATA 58,201,72,208,3,76,167,58,20
1,78,208,3,76,29,57,281,5660
2040 DATA 70,208,3,76,181,58,201,83,28
8,3,76,144,58,261,49,268,8260
2050 DATA 4,162,193,208,22,281,50,208,
4,162,197,208,14,201,51,208,527
2060 DATA 4,162,201,208,6,261,52,208,2
8,162,205,142,1,211,162,255,2323
2070 DATA 236,252,2,246,251,162,241,14
2,1,211,76,135,57,201,27,208,689
2080 DATA 78,162,64,169,12,157,66,3,32
,86,228,76,46,58,68,101,3452
2090 DATA 103,97,115,32,86,185,101,119
,32,98,121,32,77,97,116,42,3333
2100 DATA 82,97,116,44,32,40,99,41,32,
65,110,97,108,111,183,155,4616
2110 DATA 162,0,169,9,157,66,3,169,12,
157,68,3,169,58,157,69,4299
2120 DATA 3,169,34,157,72,3,169,0,157,
73,3,32,86,228,96,162,5654
2130 DATA 64,169,12,157,66,3,32,86,228
,76,217,51,173,198,2,72,6470
2140 DATA 173,197,2,141,198,2,104,141,
197,2,76,29,57,162,193,165,7656
2150 DATA 20,197,20,240,252,142,1,211,
162,201,165,20,197,20,240,252,3387
2160 DATA 142,1,211,174,252,2,224,133,
58,215,58,255,248,227,162,241,6491
2170 DATA 142,1,211,76,135,57,162,197,
165,20,197,20,240,252,142,1,9864
2188 DATA 211,162,285,165,20,197,20,24
0,252,142,1,211,174,252,2,224,2967
2190 DATA 255,240,227,162,241,142,1,21
1,76,135,57,169,255,162,193,142,3445
2200 DATA 1,211,162,197,142,1,211,162,
201,142,1,211,162,205,142,1,280
2210 DATA 211,205,252,2,240,231,162,24
1,142,1,211,76,135,57,226,2,9739
2220 DATA 227,2,195,51,0,0,0,0,0,0,0,0
,0,0,0,0,3240
JULY A.N.A.L.O.Q. Computing
LISTING 2: ASSEMBLY
10 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
20 * DEGAS VIEW *
38 * by Matthew J.M. Ratcliff *
48 * *
50 * Copyright 1989 *
60 * BY ANALOG COMPUTING M
70 XXXXXXXXXXXXXXXXXXXXXXXXXXMXXX
80 *
1000 *SAVEttD:DEGA5VUF.M65
1010 *ASM,tt-, ttD:DEGASVUF.COM
1020 * Degas *FULL* View, by MatKRat
1OS0 *
1040 * This progran will load a degas
1050 * high resolution, .PI3 fornat
1060 * picture file and display 1/4
1070 * of it on 4 different pages
1080 * of 130XE Cor compatible upgrade
1090 * upgrade XL) , in Graphics node 8
* The software will then FLIP thr
then as fast as possible. Other
keyboard control options are
as follows:
— Key connands —
1 - Display 1/4 of graphic, 1st
second page
third page
fourth page
full display speed, not rea
lioo
ough
1110 *
1120 *
1130 *
1140 *
1150 *
1160 *
page
1170 * 2
1180 * 3
1190 * 4
1200 * F
1 useful
1210 x- H - show half inage, alternate
screens 1 & 3, 30 Hertz
1220 * 5 - show half inage, alternate
screens 2 & 4, 30 Hertz
1230 * N - Nornal display, show all 4
screens, 15 hertz
1240 * SPACE - Invert display, show at
nornal speed
1250 * screen will stay invert
ed, until inverted again
1260 * RETURN - Exit to na i n Menu for
another picture selection
1270 * ESCAPE - Exit progran
1280 *
1290 * At filenane input pronpt, press
E5C twice, then return
1300 * to exit fron there
1310 *
1320 * >>>BEWARE<<< Don't expect to r
un
1330 * this with SpartaDOS X Cartridge
1340 * SDK likes all those RAM banks.
1350 * Go nucking about with then and
1360 * you are going to CRASH dude!
1370 * Important addresses for
1380 * loader progran:
1390 ESCAPE = 27
1400 SCREEN = $E0
1410 * Byte splitting registers
1420 SHIFT1 = $E2
1430 SHIFT2 = $E3
1440 SHIFT3 = $E4
1450 SHIFT4 - $E5
1460 SAVEX = SE6
1470 BANKSCR = $4000 ; 16K IS ADDR
1480 BANKSCR1 = $5080
1490 5CAN1 = 99
1500 SCAN2 = 99
1510 * Page bank select values
1520 PAGE1 = 193
1530 PAGE2 = 193+4
1540 PAGE3 = 193+8
1550 PAGE4 = 193+12
1560 MAIN = 241
1570 * Bank select register
1580 BANK5EL = 54017
1590 BLANK4 = 48
1600 BLANK5 = 64
1610 .ORG $3200
1620 LINECOUNT .BYTE
1630 EXFLG .BYTE
1640 .OPT OBJ
1650 * Mat*Rat"s custonized systen equ
ates
1660 .INCLUDE HD : SYSEQU . M65
1670 * Mac/65's 10 Macros library
1680 .INCLUDE «D : IOMAC . LIB
1698 * Matx-Rafs Graphics routine
1700 .INCLUDE «D: GRAPHICS. M65
1710 * 2 line graphic buffer
1720 BUF160 .DS 160
1730 * Custon display list work area
1740 DISPLAY .BYTE 112,48,79
1750 .WORD BANKSCR
1760 DLA .DS 5CAN1 J 15'S GO HERE
1770
Y
1780
1790 DLB
E 8 LINES
1800
BYTE 79
SKIP 4K BOUNDAR
WORD BANKSCR1
, DS SCAN2 ; ANOTHER 104 MOD
.BYTE 65
.WORD DISPLAY
■BYTE 0,0,8,8
* Working filenane for parsing
BYTE "D1:FILENAME.EXT",155
1810
1828
1830
1840 FILEN
,0
1850 * Default directory spec
1860 FIL5PEC .BYTE "Dl :*. PI3", 155,
1870 M Initialize custon, 200 line
1880 * graphics node 8 display
1890 * list for starters
1900 INIZ LDX HO ; Setup display 1
ist
1910 LDA »15
1920 INIZ1 STA DLA,X
1930
1940
1950
1960
INK
CPX ttSCANl
BNE INIZ1
LDX BO
1970 INIZ2 STA DLB,X
1980
1990
2000
2010
2020
2030 START
INK
CPX H5CAN2
BNE INIZ2
Clear screen, show title
and Start DEGAS VIEW progran
2040
2050
2060
2070
2080
2090
2100
2110
2120
2130
GRAPHICS
LDA ttO
STA 710
Get drive nunber first
or accept default displayed
by pressing return only
CLOSE 1
PRINT ■ "BTF na'm'iBai im
PRINT
PRINT
fault shown above."
0,FIL5PEC
0, "[RETURN!
Keep de
2140
files are on ?"
PRINT 0, "Drive tt Degas .PI3
2150
2160
2170
2180
2190
2200
2210
INPUT 0, FILENAME, 2
LDA FILENAME
CMP ttl55
BEG NONEWDR
STA FIL5PEC+1
Open a directory listing
and display it
2220 NONEWDR OPEN 1, 6 , 0, FILSPEC
2230
2240
TYA
BMI NOFILE
2250 NEXTFILE INPUT 1, FILENAME
2260
2270
2288
2290
2300
2310
g
2320
2330
DOS
2340 * Or type filenane
xt reqd) to load
2350 NOFILE
2360 CLOSE 1
2370 PRINT 0,"
oad ?■■
2380 PRINT
, new drive"
2390 PRINT
RETURN] exits."
2400 INPUT
2410 CLOSE
2420 LDA FILENAME
2430 CMP SSE5CAPE
TYA
BMI NOFILE
PRINT 0, FILENAME
JMP NEXTFILE
Request filenane to view
[RETURN] only restarts, allowin
the user to change drive spec
ESCAPE will exit the progran to
Cno drive or e
Graphics file to l
0," [RETURN] = Restart
0, "Double [ESC] and [
0, FILENAME, 128
1
JULY A.N.A.L.O.Q. Computing
23
2440
BEQ
ESCEKIT
2450
CMP
«155
2460
BNE
GETFILE
2470
J MP
START
2480
ESCE
GRAPHICS
2430
PRINT O, "Degas View by Mat*
Rat"
2500
RTS
2510
K
Parse
the filename
2520
*
If no
drive letter or nuMber
2530
*
prefixed, insert those
2540
*
If no
extender, paste on .PI3
2550
GETFILE
LDA FILENAME
2560
LDX
HO
2570
LDV
tSO ; EXTENDER FOUND
FLAG
2580
STY
EXFLG
2590
CMP
«' :
2600
BEQ
GETFl
2610
LDrt
FILENAME+1
2620
CMP
»' :
2630
BEQ
GETFl
2640
LDA
8'D
2650
STA
FILEN
2660
LDA
FIL5PEC+1
2670
STA
FILEN+1
2680
LDA
8' :
2690
STA
FILEN+2
2700
LDV
83
2710
K
If a
1 .' is in the filename
2720
X
don't
Mess with the extender
2730
GETF1 LDA FILENAME, X
2740
STA
FILEN, Y
2750
INX
2760
INY
2770
CMP
8155
2780
BEQ
GETF2
2790
CMP
8' .
2800
BNE
GETFl
2810
INC
EXFLG
2820
JMP
GETFl
2830
GETf
2840
BNE
GETF3
2850
DEY
2860
LDA
»' .
2870
STA
FILEN, Y
2880
INY
2890
LDA
»'P
2900
STA
FILEN, Y
2910
INY
2920
LDA
tt'I
2930
STA
FILEN, Y
2940
INY
2950
LDA
tt'3
2960
STA
FILEN, Y
2970
INY
2980
LDA
8155
2990
STA
FILEN, Y
3000
GETF
3010
OPEN 1,4,0,FILEN
3020
TYA
3030
BPL
LOADIT
3040
M
Bad f:
ilenane or drive?
3050
*
Restart the prograH
3060
PRINT 8, "File error, press
RETURN"
3070
LDA
»255
3080
HOLD
3090
BEQ
HOLD
3100
STA
CH
3110
JMP
START
3120
LOADIT
3130
*
Let OS setup the GRAPHICS 24
3140
*
originally, to get all system
3150
«
variables set properly
3160
*
Then point to custom display
3170
K
list and Memory.
3180
GRAPHICS 24
3190
LDA
8 <DISPLAY
3200
LDX
8 >DISPLAY
3210
LDY
JIFFY
3220
LOAI
CPY JIFFY
3230
BEQ
L0ADIT1
3240
STA
560
3250
STX
561
3260
LDA
« <BANKSCR
3270
STA
SAVMSC
3280
LDA
8 >BANKSCR
3290
STA
SAVMSC+1
3300
LDA
8SCAN1+5CAN2+2
3310
STA
LINECOUNT
3320
*
Forget the 34 byte Degas header
3330
forget header
BGET 1,BUF160,34 ; Get and
3340
3350
3360
3370
3380
3390
3400
3410 CNTNU
LDA SAVMSC
STA SCREEN
LDA
TYA
BPL CNTNU
CLOSE 1
GRAPHICS O
PRINT 0,"L0AD ERROR"
RTS
Setup screen RAM pointers
3420
3430
3440
3450
3460
3470
3480
3490
3500
3510
3520
SAUMSC+1
STA 5CREEN+1
LDA 810
STA 710
LDA «0
STA 709
LDA 84
STA 712
* Get next 2 screen lines of pict
ure data
3530 GLINE
a line
BGET 1,BUF16B,16B ; Read
3540
3550
TYA
BPL GLINE2
3560 GLINE1 LDX tSMAIN
3570 STX BANKSEL
3580 GRAPHICS
3590 CLOSE 1
3600 PRINT 8, "File input error"
3610 RTS
3620 GLINE2 LDX 80 ; Buffer index
3630 * SHIFT1 will hold even pixels fo
r even lines
3640 * SHIFT2 will hold odd pixels for
even lines
3650 GLINE3 LDA BUF160,X
3660
LDY
84
3670
CLC
3680
GLI
ROL A
3690
ROL
SHIFT1
3700
ROL
A
3710
ROL
SHIFT2
3720
DEY
3730
BNE
GLINE4
3740
CLC
3750
LDY
84
3760
*
SHIFT3 will hold even pixels fo
r Odd
lines
3770
*
SHIFT4 will hold odd pixels for
Odd
lines
3780
LDA
BUF16Q+80,H
3790
GLII
ROL A
3800
ROL
SHIFT3
3810
ROL
A
3820
ROL
SHIFT4
3830
DEY
3840
BNE
GLINE4A
3850
INX
3860
LDA
BUF168,X
3870
LDY
84
3880
CLC
3890
GLII
3900
ROL
5HIFT1
3910
ROL
A
3920
ROL
SHIFT2
3930
DEY
3940
BNE
GLINE5
3950
LDY
84
3960
CLC
3970
LDA
BUF160+80,X
3980
GLIN
ASL A
3990
ROL
SHIFT3
4000
ASL
A
4010
ROL
SHIFT4
4020
DEY
4030
BNE
GLINE5A
4040
STX
SAVEX
4050
LDX
8PAGE1
4060
*
Stuff
pixel data in PAGE1 bank
4070
if
and wain bank. Use PAGE1,2,3,4
4080
K
for computational convenience
4090
*
Shove
copy of PAGEl in MAIN
4100
e
4110
«
so display doesn't flash garbag
*
durins
[ keyboard inputs.
4120
*
4130
J(
Stuff
appropriate shift bytes
4140
*
into proper pages, as enabled.
4150
STX
BANKSEL
JULY A.IM.A.L.O.Q. Computing
4168 LDft 5HIFT1
4170 STft (SCREEN) ,Y
4180 LDX ttMftIN
4190 5TX BANKSEL
4200 STA (SCREEN), Y
4210 LDX 8PAGE2
4220 5TX BANKSEL
4230 LDft 5HIFT2
4240 STA (SCREEN), Y
4250 LDX 8PAGE3
4260 STX BfiNKSEL
4270 LDA 5HIFT3
4280 STft (SCREEN), V
4290 LDX 8PAGE4
4300 STX BftNKSEL
4310 LDft SHIFT4
4320 STft (SCREEN), Y
4330 INC SCREEN
4340 BNE CHKDN
4350 INC SCREEN+1
4360 * Restore buffer index and check
4370 * if done reading picture file.
4380 CHKDN LDX SAVEX
4390 INX
4400 CPX »80
4410 BED. UPDLINE
4420 JMP GLINE3
4430 UPDLINE
4440 DEC LINECOUNT
4450 BEQ 5H0IT8
4460 LDft LINECOUNT
4470 CMP ttlOO
4480 BNE JMGL
4490 LDft 8 <B0NKSCR1
4500 STft SCREEN
4510 LDft M >B0NKSCR1
4520 STfl SCREEN+1
4530 JMGL
4540 JMP GLINE
4550 * Display routine
4560 * Enable respective banks
4570 * Stick BLANK4 lines COMMand in
4580 * display list for even line page
s
4590 * and BLANK5 for odd line pages
4600 * This is done to Mininixe vertic
al
4610 * jitter during page flipping.
4620 * Horizontal jitter is not elinin
ated,
4630 * however, as it would require so
Me
4640 * extra fancy bit shifting at loa
d
4650 * tine. Not fun.
4660 *
4670 SHOITO CLOSE 1
4680 SHOIT LDX tiPAGEl
4690 LDY UBLANK4
4700 SH0IT1A LDA JIFFY
4710 SH0IT1 CMP JIFFY
4720 BEQ SH0IT1
4730 STX BANKSEL
4740 STY DI5PLAY+1
4750 INX
4760 INX
4770 INX
4780 INX
4790 CPX 8PAGE3
4800 BNE 5H0IT2
4810 LDY 8BLANK5
4820 SH0IT2 LDA CH
4830 CMP 8255
4840 BNE 5H0IT3
4850 CPX 8PAGE4+4
4860 BEQ SHOIT
4870 BNE 5H0IT1A
4880 * Always re-enable MAIN bank
4890 * before exiting any display loop
■
4900 SH0IT3 LDX tSMAIN
4910 STX BftNKSEL
4920 * Process key connand
4930 * ESCAPE - Exit to dOS
4940 * 1 - Display static screen, page
1 only
4950 * 2 - Display page 2
4960 * 3 - Display page 3
4970 * 4 - Display page 4
4980 * H - Show half of image, flip sc
reens
4990 * 1 & 3 at 30 hertz
5OO0 * S - Show half of image, flip sc
reens
5010 * 2 & 4 at 30 hertz
5020 * F - Fastest display possible, a
bit
5030 * useless, but easy enuf to t
hrow in
5040 * N - Nornal display (SHOIT above
)
5050 * SPACE - Invert displays, swap c
olor registers, simple
5060 *
5070 * Any other key loops back to STA
RT
5080 HOLDIT CLOSE 4
5090 OPEN 4,4,0,"K:"
5100 TYA
5110 BPL HOLDNOM
5120 CLOSE 4
5130 JMP START
5140 HOLDNOM BGET 4, FILENAME, 1
5150 LDA FILENAME
5160 * SPACE - Invert display?
5170 CMP «32 ; SPACE?
5180 BNE CKSCL
5190 JMP INVERT
5200 * (H)alf display, 1&3 ?
5210 CKSCL CMP tt'H
5220 BNE CKSNRM
5230 JMP SHOHALF
5240 * (N)ornal display, 4 pages?
5250 CKSNRM CMP tt'N
5260 BNE CKSFAST
5270 JMP SHOIT
5280 * (F)astest possible flipping?
5290 CKSFAST CMP 8"F
5300 BNE CKSCS
5310 JMP FASTEST
5320 CKSCS
5330 * (S)how half, pages 2&4?
5340 CMP «'S
5350 BNE CK1
5360 JMP SH05ECHAF
5370 * (l)-show screen 1 only?
5380 CK1 CMP tt'l
5390 BNE CK2
5400 LDX 8PAGE1
5410 BNE SVPG
5420 * (2)-show screen 2 only?
5430 CK2 CMP 8'2
5440 BNE CK3
5450 LDX 8PAGE2
5460 BNE SVPG
5470 * (3)-show screen 3 only?
5480 CK3 CMP 8'3
5490 BNE CK4
5500 LDX 8PAGE3
5510 BNE SVPG
5520 * (4)-show screen 4 only?
5530 CK4 CMP 8"4
5540 BNE CKESC
5550 LDX 8PAGE4
5560 SVPG STX BANKSEL
5570 LDX 8255
5580 SVPG1 CPX CH
5590 BEQ SVPG1
5600 LDX 8MAIN
5610 STX BANKSEL
5620 JMP HOLDNOM
5630 * (ESCAPE) from the program?
5640 CKESC CMP ttESCAPE
5650 BNE RESTART
5660 CLOSE 4
5670 PRINT 0, "Degas View by Mat*
Rat, (c) Analog"
5680 RTS
5690 RESTART CLOSE 4
5708 JMP START
5710 * INVERT routine - swap color
5720 * registers 709 & 710
5730 INVERT LDA 710
5740 PHA
5750 LDA 709
5760 STA 710
5770 PLA
5780 STA 709
5790 JMP SHOIT
5800 * Show (H)alf, pages ! & 3
5810 SHOHALF LDX 8PAGE1
5820 lda jiffy continued on page 65
JULY A.IM.A.L.O.Q. Computing
NEW XL/XE SOFTWARE!
DARK CHAMBERS AIRBALL SUMMER GAMES
CROSSBOW (XE gun) CRIME BUSTERS (XE gun)
ONE ON ONE KAIiATEKA
CHOPLIFTER AIRBALL
COLOR PRINTER
PLOTTER
1020
Complete with:
• 2 Pen Sets
• 1 Roll Paper
• Power Supply & Cable ' Brand New
EXTRA PEN SETS *£i®53
$14,98
RranH r\Jr-\i/
ATTN. DEALERS
PAC-MAN <^Q
Case of 120 y*-*^*
800 48K COMPUTER
w/PAC-MAN
$69.95
NeCOIllllUoliril
1025 PRINTER
■ 80 Column
■ Dot Matrix
1 Friction /Tractor
» Direct Connect
$79.98
1200XL 64K COMPUTER
w/ PAC-MAN
Rccon dl U oned
1027 PRINTER
80 Column
Direct Connect
I-etter Quality
Brand New
DISK DRIVE
ri /t ^ 4t UlUiS. UK1VL
1050 $169.
800 BOARDS
• Mother • CPU your choice
• Power • ROM $8.98
80it I/O Cable . $4.98
850 Interface ^79.98
Scnal, parallel ^ rmnl||Uonc ,|
810 DRIVES $129.
HrcwiiliUonrd
BASIC TUTOR £a qq
4 hooks v't.^O
5.25" DISKS 20 CENTS EA."
QTY. PRICE
10 S4.00
100 .... S29.95
•1000 .... $200
MAJORltY AKE UNNOTCHKD
CONTAINING OLD SOFTWARE
DOS XE .99.95
DOS 2.5 w/manual .. $4.98
1010 Tape drive S29.
10' Joystick cxt S .99
Trackball S9.95
CARTRIDGES FOR 800, XL, XE
BASIC CARTRIDGE
[1AS1C TUTOR (4 BOOKS)
TURMOIL
PAC-MAN (no box)
DONKEY KONG [no box)
GORE (100.80O)
DEMON ATTACK (400.800)
DELUXE INVADERS
JOURNEY TO THE PLANETS..
MATH ENCOUNTER
DANCE FANTASY
LOGIC LEVELS
MEMORY MANOR
LINKING LOGIC
$4.95 CHICKEN $8.98
$4.95 CLAIM JUMPER $8.98
$4.95 DELTA DRAWING $8.98
$4.95 HEY DIDDLE DIDDLE .... $8.98
$4.95 SLIME (400/8OO) $8.98
$4.95 ALPHABET ZOO $8.98
$4.95 ALF $8.98
$4.95 ADVENTURE CREATOR .. $8.98
$4.95 SKY WRITER $14.95
$7.98 FOOTBALL $14.95
$8.98 DEFENDER $14.95
$8.98 ROBOTRON $19.98
$8.98 TENNIS $19.98
$8.98 FINAL LEGACY $19.98
MARIO BROS $19.98
DONKEY KONG JR $19.98
JUNGLE HUNT $19.98
MOON PATROL $19.98
BATTLEZONE $19.98
FOOD FIGHT $19.98
HARDBALL $19.98
FIGHT NIGHT $19.98
ONE ON ONE BASKETBALL .. $19.98
DESERT FALCON $19.98
NECROMANCER $19.98
RESCUE ON FRACTALUS $19.98
BALLBLAZER $19.98
BLUE MAX $19.98
STAR RAIDERS 11 $19.98
DAVID'S MIDNIGHT MAGIC $19.98
ARCIION $19.98
KARATEKA $19.98
CHOPLIFTER $19.98
GATO $24.98
ACE OF ACES $24.98
LODE RUNNER $24.98
BARNYARD BLASTER (XE gun) .. $24.98
DARK CHAMBERS $29.98
AIRBALL $29.98
SUMMER GAMES $29.98
CROSSBOW (XE gun) $29.98
CRIME BUSTERS (XE gun) $29.98
DISK SOFTWARE FOR 800, XL, XE
DAVID'S MIDNIGHT MAGIC
ZORRO
BANDITS (48K 400.800)
PROTECTOR II
CI.AIM JUMPER
SYNTREND
. S4.98 CROSSCHECK S4.98 SPIDERMAN S4.98
. S4.9S
. $4.98
. S4.98
S4.98
. S4.98
MOLECULE MAN $4.98
CRYSTAL RAIDER $4.98
DESPATCH RIDER S4.98
MISSION ASTEROID $4.98
HULK S4.98
VISICALC $24.98
BOOKKEEPER W/ numeric keypad... $29.98
GET RICH S39.98
SAN JOSE COMPUTER
T H
T
R I
STORE
N
Sunrise Plaza 640 Blossom Hill Rd. SanJose, CA 95123
(408)224-8575 . BBS (408) 224-9052
SHIPPING: ADD S5.00 TO ALL ORDERS. AIR AND INTERNATIONAL SHIPPING EXTRA. TUATS IT.
WARRANTY: 90 DAY WARRANTY ON ALL ITEMS. TAX: CALIFORNIA RESIDENTS ADD 7% SALES TAX.
PREPAYMENT: USE VISA, MASTERCARD, MONEY ORDER, CASHIER'S CHECK OR PERSONAL CHECK.
PERSONAL CHECK MUSI" CLEAR PRIOR TO SHIPMENT. C.O.D.: CASH, CASHIERS CHECK OR MO. ONLY.
■s subject to change without notice. Brand and/or product names are trademarks or registered trademarks of their respective holde
Ad produced on an ATARI ST using l^jbllshlng Partner and printed on an ATARI SLM801 PostScript compatible laser printer.
CIRCLE #109 ON READER SERVICE CARD.
continued from page 17
of 0-65535 are allowed.
Input mode toggle (I): This command tog-
gles the INP flag between hex string and
character-string modes.
Set SRC drive (0): Pressing this key in-
creases the source-drive number. The pro-
gram supports Drives 1-8.
Set DST drive (D): This command in-
creases the destination drive by 1. You have
access to all eight drives here also.
Redraw screen (Control-Clear): This
forces DM to redraw the screen from scratch
and removes any markers that are left behind
from a search.
Print screen (Control-P): Pressing this key
will perform a character dump of the screen
to any printer. All offensive control charac-
ters and the like are removed from the out-
put. Use this to produce a hard copy of a
sector's data.
The Escape key may be used at any time
to abort any function. The "less than" and
"greater than" keys (" <" and " >") are used
to change the screen hue and luminance,
respectively.
Disassembler
The disassembler converts a binary file to
assembly language source code. This code
can be viewed on the screen (pressing the
space bar pauses the output), dumped to a
printer or saved as a disk file. Actually the
disk file is in LIST format so it can be load-
ed into a word processor or entered into an
assembler like MAC/65. To enter the result-
ing file into MAC/65 use: ENTER #
D:FILENAME,A.
The "A" adds line numbers to the source
code. The code that is generated always has
the same format:
MNEMONIC OPERAND ADDR Bl B2 B3
K
ASTER
boundaries, but does not cross segments of
code. So one segment might end as:
An example would be:
LDA $4503, X
$3600 BD 03 45
The data on the left is the generated code.
The ";" marks the beginning of the comment
field. ADDR is the memory location where
LDA $4503,X would be assembled. Bl, B2
and B3 are the hexadecimal values for the as-
sembly opcode and the operand. When DM
encounters data that isn't assembly code it
writes it out as ".BYTE $hh." The headers
for each segment of a file are displayed as:
* = $3008 ;END = $38FE
Disassembly does continue across sector
JULY A.N.A.L.O.Q. Compucing
LDA »$90
;$4823
A9 98
.BYTE $28
,-$4825
28
* =$4826
;EMD =
$4118
.BYTE $42
;$4026
42
.BYTE $3A
;$4027
3A
STA $5E12
;$4828
8D 12 5E
etc
The series of bytes— $20, $42 and $3A—
quite probably make the instruction JSR
$3A42.
To begin disassembly, you must first set
several parameters. You are reprompted if you
type in an improper value; no error message
appears.
All input requires using the Return key to
finalize it. Escape aborts at any time.
You must first select the type of the disas-
sembly, file (F) or disk (D). Pick the desti-
nation device which can be E (screen), P
(printer) or D (disk file). If you choose D you
must type in a complete file name as in:
Dmfilename.ext.
Even for Drive 1 you must type Dl:. The
extension, of course, is optional. If the file
is not a binary file, an error message will be
given. Next choose whether you want labels.
The labels are those which most assembly
language programmers use. They follow
closely those given in the technical manual
and/or Computel's Mapping the Atari.
If you chose to disassemble files, type in
a complete filename as your source file. The
program takes control unless you press Es-
cape to abort. If you are sending the code to
a disk file or the printer, keep in mind that
the output is kept in a large buffer. Conse-
quently, there will be no printing or disk ac-
cess until the buffer is full or you terminate
the operation by pressing Escape. If the code
is to be sent to disk, you will be asked to in-
sert a destination disk when the buffer is full.
Since the output code will be much larger
than the object code, make sure you use a
disk that is nearly empty. As you have seen,
three bytes of data will become 26 bytes of
source code!
If you selected disk disassembly (D), you
must specify a source-drive number, densi-
ty, starting-sector number, and the number
of sectors to read. You cannot start at the last
sector (2D0 for single and $410 for double
density). Start at one less (2CF or $40F) and
specify 2 as the number of sectors to disas-
semble. Then you must select an offset into
the first sector (0-7F). For example, a boot
sector does not have assembly code in the
first six bytes. The real code begins at Byte
6 (bytes are numbered starting at 0!). 6 would
be the offset. Specify an origin address (for
example $706 for a boot sector). The data
does not get put there— the address is just
used for reference.
We must digress for a moment to explain
the next option. Commercial boot disks
generally use $80 bytes per sector, and the
sectors are laid out sequentially on the disk.
Sectors that are part of a file are not neces-
sarily sequential. Each sector has a link to
the next sector in the file. So Sector 123 may
point to Sector 150. Therefore, when disas-
sembling boot disks, type in 80 at the
BYT/SEC prompt. But if you are disassem-
bling a file or part of a file use 7D.
When disassembling part of a file you can
find where the file begins by looking at the
directory, sectors $169-$16F. Each entry is 16
bytes long. The first byte is a flag byte con-
cerning the condition of the file, whether it
is locked, deleted, etc. The next two bytes
give the number of sectors in the file, while
Bytes 3 and 4 have the starting-sector num-
ber. (The number of sectors and starting-
sector number are stored in LO/HI format,
so to calculate the starting sector take Byte
3 plus 256 times Byte 4.) With the editor,
read the starting sector and use the trace func-
tion to follow the file around the disk. When
you have found what you want, switch to the
dissembler.
Warning!
t
If you are sending output to disk, you will
need a separate diskette for this output. This
is particularly true on any boot disk. Writ-
ing data to that disk would probably destroy
programs stored there. Please put write pro-
tect tabs on the source disk, and always use
a separate disk for output.
A final note: The input routine is very
smart. If you are asked to supply a number,
only legal hexadecimal digits are allowed to
be typed, otherwise almost anything goes.
We hope that you can find a good use for
this program, it is not a full-blown file edi-
tor (if you want an incredible DOS 2.0 file
editor, contact me on DELPHI— my member-
name is BBKBRYAN), but it should provide
you with the means to get a peek at those
nasty machine-language games you have or
fix the dreaded Error 164 (file number mis-
match)! Well, so long and happy hacking.
Bryan and Barry are currently taking a
break, partly so they have time to play with
their new STs and partly so they can solve Sta-
tionfall and thus save the universe.
LISTING 1: M/L EDITOR DATA
1000 DATA 255,255,0,48,212,79,76,96,69
,112,112,112,112,112,112,112,5604
1010 DATA 112,112,70,46,50,112,66,90,4
8,2,112,6,32,6,32,6,6676
1020 DATA 65,3,48,112,112,112,70,86,50
,6,64,66,40,40,2,2,7241
1030 DATA 2,2,2,2,2,2,2,65,29,48,112,1
12,112,70,86,50,9449
1040 DATA 32,66,230,48,32,0,66,0,40,2,
2,2,2,2,2,2,3250
1050 DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,65
,52,48,3690
1060 DATA 128,128,128,226,249,154,128,
162,225,242,242,249,128,171,239,236,86
07
1070 DATA 226,229,128,225,238,228,128,
162,242,249,225,238,128,179,227,232,90
74
1080 DATA 225,240,240,229,236,128,128,
128,128,128,176,242,239,228,245,227,81
67
1090 DATA 229,228,128,230,239,242,154,
128,161,142,174,142,161,142,172,142,32
48
1100 DATA 175,142,167,142,128,163,239,
237,240,245,244,233,238,231,128,128,82
01
1110 DATA 239,240,244,233,239,238,6,0,
100,105,115,107,0,101,100,105,5209
1120 DATA 116,111,114,0,243,229,236,22
9,227,244,0,0,100,105,115,97,8403
1130 DATA 115,115,101,109,98,108,101,1
14,0,243,244,225,242,244,0,0,9347
1140 DATA 101,120,105,116,0,0,0,0,0,0,
0,0,128,128,128,173,404
1150 DATA 174,165,128,128,175,240,229,
242,225,238,228,128,128,128,128,128,42
77
1160 DATA 128,128,128,128,128,161,164,
164,178,128,162,145,128,162,146,128,10
80
1170 DATA 162,147,128,128,68,105,115,9
7,32,84,121,112,101,32,91,70,3122
1180 DATA 47,68,93,0,68,101,115,116,39
,110,32,91,69,47,80,47,723
1190 DATA 68,110,93,0,32,32,32,76,97,9
8,101,108,115,32,91,89,1933
1200 DATA 47,78,93,0,32,32,32,32,83,11
1,117,114,99,101,32,70,1327
1210 DATA 105,108,101,0,83,114,99,32,6
8,114,185,118,101,32,91,49,2115
1220 DATA 45,56,93,0,32,32,68,101,110,
115,105,116,121,32,91,49,2149
1230 DATA 45,50,93,0,32,83,101,99,116,
111,114,32,91,49,45,50,947
1240 DATA 68,48,93,0,32,32,32,35,32,11
1,102,32,83,101,99,116,1277
1250 DATA 111,114,115,0,32,32,79,102,1
02,115,101,116,32,91,48,45,1356
1260 DATA 55,70,93,0,79,114,105,103,10
5,110,32,91,48,45,70,70,1285
1270 DATA 70,70,93,0,66,121,116,47,83,
101,99,32,91,55,68,47,958
1280 DATA 56,48,93,0,112,112,16,70,66,
50,16,66,200,59,66,0,93
1290 DATA 40,2,2,2,2,2,2,2,2,2,2,2,2,2
,2,2,1600
1300 DATA 16,1,222,49,66,126,50,0,2,48
,66,0,45,16,66,128,8687
1310 DATA 42,32,66,190,51,65,190,49,66
,206,50,0,2,2,2,2,8061
1320 DATA 2,65,190,49,0,40,80,120,160,
200,240,24,64,104,144,184,7738
1330 DATA 224,8,48,88,128,168,208,248,
32,72,112,152,40,40,40,40,3538
1348 DATA 40,40,40,41,41,41,41,41,41,4
2,42,42,42,42,42,42,7001
1350 DATA 43,43,43,43,100,105,115,107,
0,109,97,115,116,101,114,0,2740
1360 DATA 72,99,73,0,81,89,88,89,0,0,0
,6,100,105,115,107,323
1370 DATA 0,0,101,100,105,116,111,114,
0,0,0,0,0,100,105,115,9798
1380 DATA 107,0,0,100,105,115,97,115,1
15,101,109,98,108,101,114,0,3649
1390 DATA 0,0,0,0,0,108,97,116,97,0,10
1,110,116,114,121,0,1820
1400 DATA 0,0,8,0,128,179,165,163,154,
128,128,128,128,128,128,166,9215
1418 DATA 169,172,154,128,128,128,128,
128,128,172,174,171,154,128,128,128,82
5
1428 DATA 128,128,128,162,185,180,154,
128,128,128,128,128,128,179,178,163,17
67
1438 DATA 154,145,128,128,128,128,128,
164,179,180,154,145,128,128,128,128,65
5
1440 DATA 128,169,174,176,154,168,128,
128,128,128,128,164,174,179,154,145,20
36
1450 DATA 128,128,128,128,164,233,243,
235,128,173,225,243,244,229,242,128,88
58
1460 DATA 168,229,236,248,128,179,227,
242,229,229,238,128,141,128,179,229,74
72
1470 DATA 236,229,227,244,128,163,239,
237,237,225,238,228,178,13,114,101,456
7
1488 DATA 97,100,0,0,139,13,117,112,0,
0,0,0,141,13,100,110,9540
1490 DATA 0,0,0,0,165,13,101,100,105,1
16,0,0,183,13,119,114,2175
1500 DATA 185,116,101,0,181,13,117,110
,100,111,0,8,174,13,3,98,889
1518 DATA 97,115,101,0,163,13,99,104,9
7,114,115,0,162,13,98,102,3226
1520 DATA 105,108,108,0,170,13,101,111
,114,0,0,0,180,13,116,114,1800
1530 DATA 97,99,101,0,166,13,102,105,1
08,101,3,8,172,13,108,105,2323
1540 DATA 110,107,3,0,182,13,100,101,1
10,115,0,0,173,13,109,101,2191
1550 DATA 110,117,0,0,179,13,115,101,1
14,99,104,0,168,13,40,127,2638
1560 DATA 36,0,0,0,142,13,36,127,40,0,
0,0,169,13,105,110,9726
1570 DATA 112,117,116,0,175,13,115,111
,114,99,101,0,164,13,100,101,3467
1580 DATA 115,116,110,0,253,13,114,102
,114,115,104,0,219,13,97,98,4586
1590 DATA 111,114,116,0,156,13,104,117
,101,0,92,0,158,13,188,117,2448
1600 DATA 109,0,92,0,128,128,176,242,2
29, 243, 243, 128, 163, 175, 174, 180, 5320
1610 DATA 178,175,172,141,176,128,244,
239,128,240,242,233,238,244,128,244,98
30
1620 DATA 232,233,243,128,243,227,242,
229,229,238,128,128,128,32,160,53,2407
1630 DATA 32,4,53,169,190,141,48,2,169
,49,141,49,2,169,6,133,3413
1640 DATA 185,169,45,133,186,162,0,134
,184,134,144,134,137,134,148,134,13
1650 DATA 154,134,161,232,134,143,134,
162,134,163,134,182,32,187,53,169,272
1668 DATA 0,32,185,56,32,11,55,32,113,
52,32,45,52,32,4,53,7831
1670 DATA 76,33,52,173,252,2,201,255,2
40,249,162,255,142,252,2,72,3427
1680 DATA 169,222,141,220,49,169,49,14
1,221,49,104,162,26,221,139,52,8242
JULY A.N.A.L.O.G. Computing
1698 DATA 240,5,202,16,248,48,220,138,
10,170,10,168,192,40,144,2,5946
1700 DATA 160,40,32,115,52,189,168,55,
141,111,52,189,169,55,141,112,7599
1710 DATA 52,32,32,57,32,255,255,160,4
0,138,72,162,0,185,91,60,6296
1720 DATA 157,0,45,200,232,224,4,208,2
44,169,154,141,4,45,104,170,9242
1730 DATA 96,42,57,34,21,1,56,62,0,40,
46,18,35,102,11,8,6514
1740 DATA 58,54,118,14,6,13,45,16,55,3
7,182,138,173,37,228,72,4729
1750 DATA 173,36,228,72,96,132,183,160
, 0,132, 129, 169, 128, 145, 185, 32, 8548
1760 DATA 166,52,164,129,201,155,240,5
7,201,27,208,2,56,96,201,126,8603
1770 DATA 208,11,192,0,240,227,169,0,1
45,185,136,16,220,166,182,240,2918
1780 DATA 17,41,127,201,58,144,2,41,22
3,32,216,56,224,0,16,2,3119
1790 DATA 48,199,196,183,240,195,153,8
5,45,32,235,54,145,185,200,208,2438
1800 DATA 184,153,85,45,169,0,145,185,
24,96,169,0,162,34,157,5,4117
1818 DATA 45,202,16,250,96,169,0,133,1
82,160,33,76,175,52,169,1,5932
1820 DATA 133,182,160,32,32,175,52,144
,1,96,162,0,189,85,45,201,5940
1830 DATA 155,240,3,232,208,246,138,41
,1,240,16,162,43,189,85,45,6941
1840 DATA 157,86,45,202,16,247,169,48,
141,85,45,162,0,160,0,189,6063
1850 DATA 85,45,201,155,240,26,133,153
,232,189,85,45,133,152,134,133,207
I860 DATA 132,130,32,196,56,164,130,16
6,133,153,85,45,200,232,208,223,3372
1870 DATA 24,96,169,1,133,182,168,4,32
,175,52,144,1,96,32,175,4481
1880 DATA 63,168,185,85,45,201,155,208
,2,24,96,32,216,56,6,212,6126
1890 DATA 38,213,6,212,38,213,6,212,38
,213,6,212,38,213,138,5,7134
1900 DATA 212,133,212,208,208,220,169,
0,160,0,153,0,40,153,0,41,3798
1910 DATA 153,0,42,153,0,43,200,208,24
1,165,82,133,85,152,133,84,9012
1920 DATA 96,173,254,49,133,138,173,22
,50,133,139,162,0,160,0,189,6717
1930 DATA 15,60,145,138,132,128,160,28
,145,138,164,128,232,200,189,15,740
1940 DATA 60,145,138,132,128,160,29,14
5,138,164,128,32,238,53,232,224,1769
1950 DATA 32,208,218,96,165,138,24,105
,40,133,138,144,2,230,139,96,7900
i960 DATA 173,254,49,133,138,173,22,50
,133,139,169,2,133,129,165,148,8450
1970 DATA 240,3,76,76,54,160,0,32,175,
63,132,128,185,0,44,133,4620
1980 DATA 212,32,122,63,230,128,164,12
9,200,173,130,5,32,235,54,145,8828
1990 DATA 138,173,131,5,32,235,54,200,
145, 138, 200, 132 , 129, 192 , 26 , 240 , 1499
2000 DATA 7,164,128,192,128,208,208,96
,32,238,53,169,2,133,129,76,7917
2010 DATA 59,54,160,0,230,129,169,255,
133,147,185,0,44,200,132,128,9986
2020 DATA 201,200,144,9,56,233,200,230
,147,230,147,208,9,201,100,144,2478
2030 DATA 5,56,233,100,230,147,162,48,
134,146,134,145,201,18,176,58,8997
2040 DATA 24,101,145,133,145,164,147,4
8,8,185,145,8,9,128,153,145,6396
2050 DATA 0,164,129,165,146,32,235,54,
145,138,200,165,145,32,235,54,11
2060 DATA 145,138,200,200,132,129,192,
27,240,7,164,128,192,128,208,166,2509
2070 DATA 96,32,238,53,169,3,133,129,2
08,240,56,233,10,230,146,208,2534
2080 DATA 187,96,32,11,55,173,254,49,1
33,138,173,22,50,133,139,162,8015
2090 DATA 0,160,30,189,0,44,134,132,16
6,137,208,3,32,235,54,166,7874
2100 DATA 132,145,138,232,200,192,38,2
08,234,32,238,53,224,128,208,225,5850
2110 DATA 96,32,253,54,29,164,55,166,1
31,96,32,253,54,29,160,55,6002
2120 DATA 166,131,96,134,131,72,42,42,
42,42,41,3,170,104,41,159,3199
2130 DATA 96,162,7,165,137,208,2,162,1
5,160,7,189,241,59,153,230,488
2140 DATA 59,202,136,16,246,96,165,143
,133,212,165,144,133,213,162,5,1261
2150 DATA 32,111,55,173,127,44,133,212
,162,35,32,115,55,173,125,44,6043
2160 DATA 74,74,133,212,162,15,32,115,
55,173,126,44,133,212,173,125,9104
2170 DATA 44,41,3,133,213,162,25,165,1
62,9,144,141,171,50,165,163,9199
2180 DATA 9,144,141,181,58,165,161,24,
105,145,141,201,50,164,154,185,757
2190 DATA 1,60,141,191,50,160,1,208,2,
160, 2, 132, 134, 134, 135, 32, 5758
2200 DATA 122,63,164,134,166,135,185,1
28,5,32,235,54,9,128,157,126,7313
2210 DATA 50,232,200,192,4,208,239,76,
175,63,160,127,185,128,44,153,435
2220 DATA 0,44,136,16,247,96,32,64,0,9
6,64,0,32,96,240,55,3231
2230 DATA 125,56,57,56,177,56,236,56,7
1,57,119,57,35,58,180,58,3080
2248 DATA 89,59,222,55,231,55,11,57,26
,57,43,57,53,57,5,58,9882
2250 DATA 252,57,15,59,39,59,227,56,48
,59,191,59,15,58,96,69,2865
2268 DATA 252,57,132,72,165,137,73,1,1
33,137,76,188,54,165,148,73,7535
2278 DATA 1,133,148,76,250,53,32,108,5
3,144,1,96,165,213,208,251,1284
2280 DATA 165,212,201,128,176,245,133,
155,32,4,53,169,164,141,3,45,6315
2290 DATA 32,109,57,176,230,132,128,13
6,185,85,45,166,137,248,3,32,8841
2388 DATA 235,54,153,85,45,136,16,240,
164,155,162,0,189,85,45,153,8893
2310 DATA 0,44,232,200,192,128,248,4,2
28,128,288,248,76,2,57,169,489
2328 DATA 1,133,182,160,5,32,175,52,14
4,1,96,169,85,133,243,169,9337
2338 DATA 45,133,244,169,8,133,242,32,
0,216,32,210,217,144,3,32,7223
2340 DATA 175,63,165,213,72,165,212,72
,162,1,134,172,202,32,34,63,6996
2350 DATA 232,169,61,157,85,45,232,184
,133,212,184,133,213,32,161,56,9467
2368 DATA 76,148,56,32,188,53,176,38,1
62,1,134,172,282,32,161,56,6749
2370 DATA 169,61,141,90,45,162,6,32,34
,63,189,85,45,32,235,54,4396
2388 DATA 157,128,42,202,16,244,96,134
,134,32,122,63,166,134,169,36,7784
2390 DATA 157,85,45,232,76,106,63,32,1
08,53,144,1,96,165,212,168,7889
2480 DATA 127,153,8,44,136,16,250,76,2
,57,165,152,32,216,56,134,6794
2410 DATA 152,165,153,32,216,56,138,18
,10,10,18,5,152,96,162,15,2291
2420 DATA 221,75,68,248,3,202,16,248,9
6,165,154,73,1,133,154,76,7739
2438 DATA 32,55,32,108,53,144,1,96,168
,127,185,8,44,69,212,153,6915
2440 DATA 8,44,136,16,245,76,2,57,32,2
50,53,32,188,54,76,32,3758
2458 DATA 55,169,242,141,228,49,169,49
,141,221,49,184,184,76,45,52,6291
2468 DATA 32,148,55,76,2,57,168,39,169
,8,153,128,42,136,16,258,6471
JULY A.N.A.L.O.Q. Computing
2478 DATA 96,166,162,32,63,57,134,162,
76,32,55,166,163,32,63,57,4428
2488 DATA 134,163,76,32,55,232,224,9,2
88,2,162,1,96,32,188,53,4453
2498 DATA 144,1,96,165,213,288,251,165
,212,281,64,144,5,168,181,76,1568
2588 DATA 9,59,18,10,133,212,173,125,4
4,41,3,5,212,141,125,44,5853
2518 DATA 76,2,57,165,154,288,3,76,24,
53,76,15,53,32,189,57,1514
2528 DATA 144,1,96,192,8,248,15,132,18
4,168,44,185,85,45,153,48,6953
2538 DATA 45,136,16,247,48,4,165,184,2
48,232,168,8,185,48,45,166,9318
2548 DATA 137,248,3,32,235,54,153,85,4
5,288,196,184,288,238,169,129,3948
2558 DATA 56,229,184,133,183,168,8,162
,8,132,128,189,85,45,217,8,7385
2560 DATA 44,288,13,288,232,228,184,28
8,242,165,128,133,155,32,218,57,2696
2578 DATA 164,128,288,196,183,288,224,
96,165,155,74,74,74,168,185,254,3763
2588 DATA 49,133,138,185,22,58,133,139
,152,18,18,18,133,136,165,155,6788
2590 DATA 56,229,136,133,136,18,24,181
,136,24,185,2,168,169,127,145,7178
2688 DATA 138,96,32,168,53,32,187,53,7
6,2,57,173,198,2,24,185,3985
2618 DATA 16,141,198,2,96,173,198,2,17
0,41,240,133,142,138,24,185,8424
2628 DATA 2,41,15,5,142,141,198,2,96,3
2,188,53,144,1,96,165,4781
2638 DATA 212,5,213,248,48,165,213,166
,161,221,5,68,144,15,248,2,8648
2648 DATA 176,35,165,212,221,3,68,144,
4,248,2,176,24,165,212,141,9552
2658 DATA 126,44,165,213,41,3,133,212,
173,125,44,41,252,5,213,141,9641
2668 DATA 125,44,76,2,57,160,188,76,9,
59,32,188,53,144,1,96,2797
2678 DATA 165,212,5,213,248,8,165,212,
133, 143, 165, 213, 133, 144, 32, 134, 1592
2688 DATA 58,16,3,32,9,59,32,148,55,76
,2,57,165,162,141,1,3219
2698 DATA 3,169,44,141,5,3,169,128,141
,4,3,169,82,288,17,165,6220
2786 DATA 163,141,1,3,169,44,141,5,3,1
69,8,141,4,3,169,87,2726
2710 DATA 141,2,3,165,143,5,144,208,2,
238,143,166,161,165,144,221,2923
2728 DATA 5,68,144,21,248,2,176,7,165,
143,221,3,68,144,10,189,7213
2730 DATA 3,60,133,143,189,5,68,133,14
4,165,143,141,18,3,165,144,7445
2748 DATA 141,11,3,169,128,141,8,3,169
,8,141,9,3,76,83,228,4338
2758 DATA 32,175,63,132,212,162,1,134,
172,162,7,189,7,68,157,85,7119
2768 DATA 45,202,16,247,162,8,32,34,63
,169,8,157,86,45,96,32,3448
2778 DATA 234,58,76,148,56,165,144,288
,7,165,143,201,2,176,1,96,7621
2788 DATA 198,143,165,143,201,255,208,
2,198,144,76,128,58,238,143,208,3283
2798 DATA 2,238,144,76,128,58,165,143,
133,159,165,144,133,168,173,125,2129
2888 DATA 44,41,3,133,144,173,126,44,1
33,143,5,144,288,5,168,182,8955
2818 DATA 76,9,59,76,128,58,165,159,13
3,143,165,168,133,144,96,32,8819
2820 DATA 108,53,144,1,96,165,143,133,
159, 165 , 144 , 133, 168 , 165, 212 , 5, 916
2838 DATA 213,248,8,165,212,133,143,16
5,213,133,144,165,143,133,212,165,4738
2840 DATA 144,133,213,32,122,63,160,3,
185,128,5,153,58,60,136,16,4875
2858 DATA 247,165,163,9,48,141,67,60,1
60,0,185,47,68,248,8,32,4798
2868 DATA 235,54,145,185,200,208,243,3
2,166,52,281,27,248,28,41,127,9179
2878 DATA 201,89,248,6,281,78,208,239,
240,8,32,153,58,16,3,32,4797
2888 DATA 9,59,76,88,59,165,161,73,1,1
33,161,76,32,55,128,128,5727
2890 DATA 128,139,144,128,139,145,128,
139,146,128,139,147,128,139,148,128,15
78
2988 DATA 139,149,128,139,150,128,139,
151,128,128,128,128,161,188,161,179,32
44
2910 DATA 163,169,169,128,128,128,8,16
9,174,188,165,178,174,161,172,161,4179
2920 DATA 180,161,179,163,169,169,128,
168,179,208,16,2,4,69,114,114,7153
2938 DATA 111,114,32,35,32,128,144,128
, 152, 145, 144, 145, 152, 146, 144, 146 , 1123
2940 DATA 152,147,144,147,152,148,144,
148,152,149,144,149,152,158,144,150,31
12
2950 DATA 152,151,144,151,152,87,114,1
85,116,101,32,83,69,67,58,32,3979
2960 DATA 48,48,48,48,32,116,111,32,68
,32,58,32,89,47,78,63,1276
2978 DATA 0,48,49,58,51,52,53,54,55,56
,57,65,66,67,68,69,1165
2988 DATA 70,165,228,244,131,128,168,2
55,164,128,164,255,168,162,230,233,892
9
2998 DATA 236,128,165,239,242,166,233,
236,131,179,242,227,232,172,233,238,17
40
3000 DATA 235,178,229,225,228,183,242,
233,244,128,128,128,128,166,8,132,3410
3010 DATA 172,132,200,32,131,64,16,3,7
6,88,61,133,168,168,0,217,7076
3020 DATA 250,66,240,5,200,192,151,208
,246,132,129,32,164,63,165,164,2465
3030 DATA 133,212,165,165,133,213,162,
23,32,34,63,32,175,63,165,168,8828
3848 DATA 133,212,162,28,32,34,63,169,
59,141,187,45,164,129,192,151,9244
3050 DATA 208,33,160,7,185,236,68,153,
85,45,136,16,247,32,175,63,8868
3060 DATA 164,168,132,212,32,122,63,16
9,1,133,171,162,8,32,88,63,5413
3070 DATA 76,54,61,190,145,67,160,8,18
9,82,66,153,86,45,232,268,9955
3880 DATA 192,3,208,244,133,171,164,12
9,185,48,68,168,185,217,68,133,2169
3090 DATA 171,152,10,168,185,191,68,14
1,52,61,185,192,68,141,53,61,7988
3180 DATA 166,171,202,240,20,32,131,64
,48,52,133,169,166,171,282,282,2152
3110 DATA 240,7,32,131,64,48,39,133,17
8,32,255,255,168,39,185,85,485
3128 DATA 45,281,32,208,3,136,16,246,1
69,155,153,86,45,169,0,153,8591
3138 DATA 87,45,165,164,24,101,171,133
, 164, 144, 2, 238, 165, 96, 32, 253, 1168
3148 DATA 64,230,201,32,188,65,162,16,
32,185,64,162,32,32,185,64,4436
3158 DATA 169,59,168,69,32,54,71,32,63
,66,76,96,69,32,2,63,1828
3160 DATA 169,35,141,90,45,32,175,63,1
65,169,133,212,162,6,76,34,7384
3170 DATA 63,169,0,133,170,165,169,133
,212,165,178,133,213,162,6,169,3045
3188 DATA 23,133,166,169,73,133,167,16
5,195,288,6,168,8,177,166,208,2412
3190 DATA 3,76,34,63,72,41,15,133,134,
104,74,74,74,74,133,173,6183
3200 DATA 230,173,200,200,177,166,133,
174,24,101,173,133,176,136,177,166,360
8
JULY A.N.A.L.O.Q. Computing
3210 DATA 133,175,105,0,133,177,165,17
0, 197, 175, 208, 6, 165, 169, 197, 174, 4383
3220 DATA 240,26,165,178,197,177,240,2
,176,67,165,169,197,176,176,61,3168
3238 DATA 165,170,197,175,144,187,165,
169,197,174,144,181,56,229,174,133,531
6
3248 DATA 173,202,168,2,208,232,177,16
6,157,85,45,16,247,41,127,157,416
3250 DATA 85,45,165,173,208,1,96,169,4
3,157,86,45,232,232,32,175,669
3268 DATA 63,165,173,133,212,238,172,3
2,34,63,198,172,96,165,166,24,214
3278 DATA 101,134,133,166,165,167,105,
0,133,167,76,165,61,32,2,63,5226
3280 DATA 76,139,61,32,2,63,32,139,61,
168,1,232,185,230,68,157,9778
3290 DATA 86,45,282,136,16,246,96,32,2
,63,32,14,63,76,143,61,3272
3300 DATA 32,81,62,76,67,62,32,81,62,1
69,44,157,86,45,169,89,5886
3318 DATA 157,87,45,96,169,0,133,170,3
2,2,63,32,26,63,232,160,5941
3320 DATA 2,208,280,169,0,133,170,32,2
,63,32,26,63,160,2,185,4619
3330 DATA 233,68,157,86,45,232,136,16,
246,96,169,65,141,90,45,96,8328
3348 DATA 32,2,63,238,171,32,175,63,16
5,169,16,12,41,127,73,127,6194
3350 DATA 24,105,1,133,181,76,188,62,1
33,181,165,169,16,16,165,164,9617
3368 DATA 56,229,181,133,212,165,165,2
33,0,133,213,76,211,62,24,101,190
3370 DATA 164,133,212,165,165,105,0,13
3,213,169,2,24,181,212,133,169,512
3380 DATA 133,212,165,213,105,0,133,17
0, 133, 213, 32, 151, 61, 198, 171, 96, 1257
3398 DATA 32,2,63,32,14,63,32,26,63,16
9,41,157,86,45,96,32,2915
3400 DATA 2,63,32,139,61,76,99,62,32,1
75,63,165,169,133,212,162,672
3410 DATA 31,76,34,63,32,175,63,165,17
0,133,212,162,34,76,34,63,7078
3420 DATA 169,40,141,90,45,76,143,61,2
02,134,178,165,172,240,25,32,201
3430 DATA 170,217,32,230,216,166,178,1
68,255,200,232,177,243,157,85,45,5975
3440 DATA 16,247,41,127,157,85,45,96,3
2,122,63,166,178,232,224,23,442
3450 DATA 240,30,224,21,144,14,173,130
,5,157,85,45,232,173,131,5,8134
3460 DATA 157,85,45,96,169,36,157,85,4
5, 232, 165, 171, 281, 2, 248, 230, 3659
3470 DATA 160,0,185,128,5,157,85,45,23
2,200,192,4,208,244,282,96,3553
3480 DATA 160,0,162,1,134,131,169,240,
53,212,74,74,74,74,170,189,560
3490 DATA 75,60,153,128,5,280,166,131,
169,15,53,212,178,189,75,68,9838
3500 DATA 153,128,5,200,166,131,202,16
,219,96,169,32,162,39,157,85,9423
3510 DATA 45,202,16,250,96,169,0,133,2
12,133,213,96,162,16,32,105,8788
3520 DATA 64,165,194,240,23,32,207,64,
8,169,128,133,204,165,196,201,3608
3530 DATA 128,248,5,173,255,44,133,204
,40,48,52,96,162,16,169,3,6424
3540 DATA 157,66,3,169,130,157,68,3,16
9,45,157,69,3,169,4,157,6109
3550 DATA 74,3,169,0,157,75,3,133,187,
133,188,32,86,228,48,15,7192
3560 DATA 32,117,65,48,18,32,73,66,208
,3,168,1,96,168,152,192,8008
3570 DATA 136,208,7,169,0,133,200,76,8
8,61,32,234,58,169,88,160,9187
3580 DATA 69,32,54,71,169,85,160,45,32
,54,71,169,69,160,69,32,5315
3590 DATA 54,71,32,63,66,76,88,61,162,
32,32,105,64,162,32,169,5698
3600 DATA 3,157,66,3,169,150,157,68,3,
169,45,157,69,3,169,8,5213
3618 DATA 157,74,3,169,8,133,199,157,7
5,3,169,0,133,197,169,128,9681
3628 DATA 133,198,173,15B,45,281,69,20
8,3,168,1,96,76,86,228,169,9952
3636 DATA 12,157,66,3,76,86,228,162,16
,169,7,157,66,3,169,8,5184
3640 DATA 157,72,3,157,73,3,76,86,228,
165, 194, 240, 94, 166, 189, 228, 4926
3650 DATA 204,240,8,189,128,44,23B,189
,160,1,96,169,1,133,189,165,1024
3660 DATA 196,201,125,208,33,173,253,4
4,41,3,133,144,173,254,44,133,974
3678 DATA 143,5,144,288,3,160,136,96,3
2,207,64,8,173,255,44,133,9547
3688 DATA 204,173,128,44,40,96,230,143
,208,2,230,144,32,207,64,8,8872
3698 DATA 173,128,44,40,96,165,202,5,2
03,240,218,165,282,56,233,1,2861
3700 DATA 133,202,165,203,233,0,133,20
3,76,134,58,165,187,5,188,248,3067
3710 DATA 42,165,187,56,233,1,133,187,
165,188,233,0,133,188,238,200,5404
3720 DATA 76,113,64,165,200,240,16,160
,151,32,163,60,32,130,65,165,8749
3730 DATA 169,133,168,198,200,208,236,
96,76,9,64,32,253,64,32,117,8528
3748 DATA 65,48,245,160,29,185,244,68,
153,85,45,136,16,247,32,73,8451
3758 DATA 66,288,5,32,117,65,48,224,16
5,152,133,164,133,212,165,153,3534
3760 DATA 133,165,133,213,32,122,63,16
2,4,32,106,63,32,117,65,48,4178
3770 DATA 199,165,152,133,212,56,229,1
64,133,187,165,153,133,213,229,165,718
2
3780 DATA 133,188,238,187,288,2,230,18
8,32,122,63,162,16,32,186,63,7292
3790 DATA 32,83,71,184,104,32,130,65,7
6,135,66,32,113,64,48,7,3834
3800 DATA 133,152,32,113,64,133,153,96
,169,85,160,45,32,54,71,160,7210
3810 DATA 0,132,20,165,26,201,5,144,25
0,173,150,45,201,69,208,1,172
3820 DATA 96,185,85,45,145,197,281,155
,248,3,200,208,244,200,152,24,4797
3838 DATA 181,197,133,197,165,198,185,
8,133,198,238,199,165,199,201,200,7501
3840 DATA 208,4,165,199,208,1,96,169,1
1,162,32,157,66,3,169,8,5887
3858 DATA 157,68,3,169,128,157,69,3,16
5,197,56,233,0,157,72,3,7110
3860 DATA 165,198,233,128,157,73,3,169
,0,133,197,133,199,169,128,133,2322
3870 DATA 198,32,23,66,208,12,169,11,1
60,69,32,54,71,32,63,66,3350
3888 DATA 162,32,32,86,228,48,27,32,23
,66,288,14,165,201,208,10,7981
3890 DATA 169,35,160,69,32,54,71,32,63
,66,160,1,96,165,163,197,8276
3900 DATA 162,96,32,234,58,169,79,168,
69,32,54,71,162,32,32,185,5524
3910 DATA 64,169,85,160,45,32,54,71,16
9,69,160,69,32,54,71,32,4118
3920 DATA 63,66,76,96,69,32,166,52,201
,155,208,249,162,32,96,165,2111
3938 DATA 152, 201, 255, 208, 2, 197, 153, 96
,65,68,67,65,78,68,65,83,6163
3948 DATA 76,66,67,67,66,67,83,66,69,8
1,66,73,84,66,77,73,3830
3950 DATA 66,78,69,66,80,76,66,82,75,6
6,86,67,66,86,83,67,4881
3968 DATA 76,67,67,76,68,67,76,73,67,7
6,86,67,77,80,67,80,4852
JULY A.N.A.L.O.Q. Computing
3978 DATA 88,67,88,89,68,69,67,68,69,8
8,68,69,89,69,79,82,4252
3988 DATd 73,78,67,73,78,88,73,78,89,7
4,77,88,74,83,82,76,4673
3998 DATA 68,65,76,68,88,76,68,89,76,8
3,82,78,79,88,79,82,4768
4886 DATA 65,88,72,65,88,72,88,88,76,6
5,88,76,88,82,79,76,4448
4818 DATA 82,79,82,82,84,73,82,84,83,8
3,65,67,83,69,67,83,4413
4828 DATA 69,68,83,69,73,83,84,65,83,8
4,88,83,84,89,84,65,4918
4838 DATA 88,84,65,89,84,83,88,84,88,6
5,84,88,83,84,89,65,5895
4848 DATA 185,181,117,189,125,121,97,1
13,41,37,53,45,61,57,33,49,2888
4858 DATA 18,6,22,14,38,144,176,248,36
,44,48,288,16,8,88,112,5348
4668 DATA 24,216,88,184,281,197,213,28
5,221,217,193,209,224,228,236,192,2348
4878 DATA 196,284,198,214,286,222,282,
136,73,69,85,77,93,89,65,81,8928
4888 DATA 238,246,238,254,232,288,76,1
88,32,169,165,181,173,189,185,161,6499
4898 DATA 177,162,166,182,174,198,168,
164,188,172,188,74,78,86,78,94,1343
4188 DATA 234,9,5,21,13,29,25,1,17,72,
8,184,48,42,38,54,9624
4118 DATA 46,62,186,182,118,118,126,64
,96,233,229,245,237,253,249,225,261
4128 DATA 241,56,248,128,133,149,141,1
57,153,129,145,134,158,142,132,148,365
5
4138 DATA 148,178,168,186,138,154,152,
8,8,6,8,8,8,8,8,3,8584
4140 DATA 3,3,3,3,3,3,3,6,6,6,6,6,9,12
,15,18,5322
4156 DATA 18,21,24,27,38,33,36,39,42,4
5,48,51,51,51,51,51,228
4168 DATA 51,51,51,54,54,54,57,57,57,6
8,68,68,68,63,66,69,2388
4178 DATA 69,69,69,69,69,69,69,72,72,7
2,72,75,78,81,81,84,4445
4188 DATA 87,87,87,87,87,87,87,87,98,9
8,98,98,98,93,93,93,6447
4198 DATA 93,93,96,96,96,96,96,99,182,
102,162,182,182,182,182,182,7861
4208 DATA 185,188,111,114,117,117,117,
117,117,128,128,128,128,128,123,126,46
6
4218 DATA 129,129,129,129,129,129,129,
129,132,135,138,141,141,141,141,141,27
88
4228 DATA 141,141,144,144,144,147,147,
147,150,153,156,159,162,165,8,1,394
4236 DATA 2,3,4,5,6,7,0,1,2,3,4,5,6,7,
8,1,4814
4248 DATA 2,3,4,9,9,9,1,3,9,9,9,18,9,9
,18,10,5369
4258 DATA 18,18,8,1,2,3,4,5,6,7,8,1,3,
0,1,3,4618
4260 DATA 1,2,3,4,18,10,0,1,2,3,4,5,6,
7,1,2,4783
4270 DATA 3,4,10,10,3,11,3,0,1,2,3,4,5
,6,7,0,4817
4280 DATA 1,12,3,5,0,1,2,3,4,8,1,2,3,4
,10,0,4774
4290 DATA 1,2,3,4,5,6,7,10,18,18,18,8,
1,2,3,4,5856
4300 DATA 8,1,2,3,4,10,18,0,1,2,3,4,5,
6,7,10,5802
4310 DATA 10,10,1,2,3,4,5,6,7,1,12,3,1
,2,3,10,4968
4320 DATA 10,10,10,10,10,119,61,55,62,
61,62,81,62,90,62,96,3405
4330 DATA 62,110,62,125,62,148,62,154,
62,233,62,234,62,249,62,2,9794
4340 DATA 2,2,3,3,3,2,2,1,2,1,3,2,44,8
8,41,89,8344
4358 DATA 44,41,32,46,66,89,84,69,32,3
6,32,42,61,36,32,32,553
4368 DATA 32,32,32,32,59,69,78,68,61,3
6,32,32,32,32,155,155,3793
4370 DATA 0,155,73,110,115,101,114,116
, 32,188, 181, 115 , 116 , 39, 118 , 44, 6433
4380 DATA 32,82,69,84,85,82,78,155,8,1
55,73,118,115,181,114,116,7970
4390 DATA 32,115,111,117,114,99,101,44
,32,82,69,84,85,82,78,155,6454
4400 DATA 0,155,67,111,109,112,108,181
,116,181,180,44,32,82,69,84,5761
4418 DATA 85,82,78,155,0,155,79,85,84,
88,85,84,32,0,155,73,5084
4420 DATA 78,80,85,84,32,0,216,162,255
,154,165,16,41,127,133,16,8621
4430 DATA 141,14,210,169,3,141,48,2,16
9,48,141,49,2,169,34,141,6416
4448 DATA 47,2,169,18,141,197,2,169,0,
141,288,2,169,2,133,82,7457
4458 DATA 141,198,2,169,148,141,199,2,
173,31,288,201,6,268,3,76,9482
4460 DATA 116,228,201,5,240,7,201,3,20
8,238,76,231,51,169,29,141,1908
4478 DATA 48,2,169,48,141,49,2,32,160,
53,169,14,133,166,169,49,7859
4488 DATA 133,167,32,198,71,32,6,72,14
4,3,76,96,69,173,85,45,5596
4498 DATA 41,223,162,0,201,70,240,5,20
1,68,208,233,232,134,194,32,4495
4508 DATA 198,71,32,17,72,176,227,168,
20,32,67,72,176,244,32,47,8318
4518 DATA 71,133,163,32,198,71,32,6,72
, 176, 207, 173, 85, 45, 41, 223, 9791
4520 DATA 162,0,201,89,248,5,201,78,28
8, 236, 232, 134, 195, 165, 194, 288, 8377
4538 DATA 23,32,198,71,32,17,72,176,17
7,168,8,32,67,72,176,244,9645
4548 DATA 32,47,71,133,162,76,229,78,3
2,223,71,32,190,71,32,6,6563
4558 DATA 72,176,151,173,85,45,41,127,
56,233,48,48,241,201,9,176,953
4560 DATA 237,133,162,32,190,71,32,6,7
2,176,264,173,85,45,41,127,8435
4578 DATA 56,233,49,48,241,281,2,176,2
37,133,161,178,189,3,60,133,2865
4580 DATA 212,189,5,60,133,213,32,122,
63,168,1,185,128,5,153,120,8915
4598 DATA 49,200,192,4,208,245,32,190,
71,32,29,72,176,203,32,35,8197
4680 DATA 72,176,246,165,212,133,143,1
65,213,133,144,32,190,71,32,29,224
4616 DATA 72,176,182,165,212,5,213,248
,245,165,212,133,202,24,101,143,5289
4620 DATA 133,212,165,213,133,203,101,
144,133,213,32,35,72,176,223,32,1622
4630 DATA 190,71,32,29,72,176,218,165,
213,208,247,165,212,201,128,176,8436
4640 DATA 241,133,189,32,198,71,32,29,
72,176,198,165,212,133,164,165,3958
4650 DATA 213,133,165,32,190,71,32,29,
72,176,182,165,213,288,247,165,6000
4660 DATA 212,201,125,240,4,201,128,28
8,237,133,196,32,168,53,132,281,4416
4678 DATA 169,52,141,48,2,169,48,141,4
9,2,32,182,63,32,50,64,4084
4680 DATA 32,135,60,32,130,65,169,0,13
3,200,162,255,173,252,2,201,4575
4690 DATA 255,240,237,142,252,2,201,28
,208,6,142,252,2,76,88,61,9511
4700 DATA 201,33,208,220,173,252,2,201
,28,248,239,281,33,288,245,142,7451
4716 DATA 252,2,76,258,70,173,86,45,56
,233,48,96,141,61,71,148,9050
4720 DATA 62,71,173,255,255,240,13,32,
79,71,238,61,71,288,243,238,5584
4730 DATA 62,71,208,238,96,281,155,208
JULY A.N.A.L.O.Q. Computing
,9,165,82,133,85,230,84,76,1975
4740 DATA 138,71,32,235,54,72,164,84,1
85,254,49,133,148,185,22,50,450
4750 DATA 133,141,104,164,85,145,140,2
00,192,39,144,9,240,7,230,84,1830
4760 DATA 32,130,71,164,82,132,85,96,1
64,84,192,21,144,53,169,0,8315
4770 DATA 133,138,169,40,133,139,169,4
0,133,140,169,40,133,141,162,0,9917
4788 DATA 160,39,177,140,145,138,136,1
6,249,165,141,133,139,165,140,133,4125
4790 DATA 138,24,105,40,133,140,165,14
1,105,0,133,141,232,224,21,208,3134
4860 DATA 223,198,84,96,32,83,71,169,6
4,141,198,2,169,0,141,182,9886
4810 DATA 2,165,166,164,167,32,54,71,1
69,58,32,79,71,169,32,32,5951
4820 DATA 79,71,32,235,71,165,166,24,1
05,16,133,166,144,2,230,167,1358
4830 DATA 96,165,85,164,84,24,121,254,
49,133,185,185,22,50,105,0,8197
4840 DATA 133,186,160,20,169,0,145,185
,136,16,251,96,32,235,71,160,1873
4858 DATA 0,132,182,200,76,175,52,32,2
35,71,160,0,132,182,160,15,9999
4860 DATA 76,175,52,32,235,71,76,108,5
3, 165, 212, 5, 213, 240, 22, 166, 2201
4870 DATA 161,165,213,221,5,60,144,15,
240,2,176,9,165,212,221,3,1097
4888 DATA 60,144,4,240,2,56,96,24,96,1
73,85,45,281,155,240,56,758
4890 DATA 201,68,240,34,201,80,240,4,2
01,69,208,44,169,58,141,86,1095
4900 DATA 45,169,155,141,87,45,162,0,1
89,85,45,153,138,45,200,232,2065
4910 DATA 224,20,208,244,24,96,173,87,
45,201,58,208,11,173,86,45,9581
4920 DATA 201,49,144,4,201,57,144,222,
56,96,32,184,72,48,43,169,8779
4930 DATA 280,160,59,32,196,72,48,34,1
69,0,133,138,166,138,189,254,3404
4940 DATA 49,188,22,50,32,196,72,48,17
,230,138,165,138,201,16,208,1982
4950 DATA 235,169,126,160,50,32,196,72
,16,3,76,9,59,96,169,32,5207
4960 DATA 141,192,3,169,155,141,193,3,
208,56,133,140,132,141,160,0,831
4970 DATA 162,0,134,134,177,140,16,2,2
30,134,41,127,201,123,176,19,587
4980 DATA 201,96,176,7,201,64,176,11,2
4,105,32,166,134,240,6,9,7584
4990 DATA 128,288,2,169,46,153,192,3,2
00,192,39,208,211,169,155,141,5867
5000 DATA 231,3,162,11,189,11,73,157,0
,3,202,16,247,32,89,228,9631
501O DATA 96,64,1,87,128,192,3,48,0,40
,0,78,8,25,0,2,9500
5020 DATA 67,65,83,73,78,281,9,0,6,84,
82,65,77,83,218,9,5570
5830 DATA 0,8,87,65,82,77,83,212,8,0,9
,66,79,79,84,191,6128
5040 DATA 25,0,10,68,79,83,86,69,195,2
5,0,12,68,79,83,73,3966
5850 DATA 78,201,9,0,16,80,79,75,77,83
,203,9,0,17,66,82,3674
5060 DATA 75,75,69,217,41,0,18,82,84,6
7,76,79,203,9,0,32,3834
5070 DATA 73,67,72,73,68,218,9,8,33,73
,67,68,78,79,218,9,5610
5080 DATA 0,34,73,67,67,79,77,218,9,0,
35,73,67,83,84,65,4482
5090 DATA 218,9,8,36,73,67,66,65,76,21
8,9,0,37,73,67,66,3746
510O DATA 65,72,218,9,0,38,73,67,80,84
,76,218,9,8,39,73,4156
5110 DATA 67,80,84,72,218,9,0,40,73,67
,66,76,76,218,9,0,4481
5120 DATA 41,73,67,66,76,72,218,9,8,42
,73,67,65,88,49,218,6589
5130 DATA 9,0,43,73,67,65,88,50,218,9,
0,65,83,79,85,78 4841
5148 DATA 68,218,9,0,66,67,82,73,84,73
,195,9,0,77,65,84,4681
5150 DATA 82,65,67,212,9,0,82,76,77,65
,82,71,286,9,0,83,4867
5160 DATA 82,77,65,82,71,286,9,8,84,82
,79,87,67,82,211,25,6646
5178 DATA 0,85,67,79,76,67,82,211,25,8
,88,83,65,86,77,83,5622
5180 DATA 195,9,8,106,82,65,77,84,79,2
88,86,0,212,70,82,176,9347
5190 DATA 86,0,218,78,82,197,86,8,224,
78,82,177,86,0,230,70,9834
5200 DATA 82,178,6,8,236,70,82,216.7,0
,237,69,69,88,208,8,8433
5210 DATA 0,238,78,83,73,71,286,8,8,23
9,69,83,73,71,286,10,7887
5220 DATA 0,240,70,67,72,82,70,76,199,
8,8,241,68,73,71,82,7174
5230 DATA 212,6,0,242,67,73,216,25,0,2
43,73,78,66,85,78,198,9342
5248 DATA 9,8,251,82,65,68,70,76,199,2
4,0,252,70,76,88,84,7734
5250 DATA 210,24,0,254,70,88,84,82,178
,25,2,8,86,68,83,76,5803
5260 DATA 83,212,25,2,6,86,66,82,69,65
,203,25,2,8,86,75,3946
5270 DATA 69,89,66,196,25,2,34,86,86,6
6,76,75,281,25,2,36,4301
5280 DATA 86,86,66,76,75,196,9,2,43,83
,82,84,73,77,210,9,6118
5290 DATA 2,47,83,68,77,67,84,284,25,2
,48,83,68,76,83,84,5228
5300 DATA 204,9,2,50,83,83,75,67,84,28
4,8,2,52,76,88,69,4654
5318 DATA 78,280,8,2,53,76,88,69,78,21
4,8,2,54,66,82,75,4663
5328 DATA 75,217,9,2,68,67,79,76,68,83
,212,9,2,111,71,88,5574
5338 DATA 82,73,79,210,121,2,112,88,65
,68,68,76,176,57,2,128,6637
5348 DATA 83,84,73,67,75,176,121,2,124
,80,84,82,73,71,176,57,7691
5350 DATA 2,133,83,84,82,73,71,176,9,2
,162,69,83,67,78,76,5958
5368 DATA 199,233,2,163,84,65,66,77,65
,288,9,2,182,73,78,86,7293
5378 DATA 78,76,199,9,2,190,83,72,78,7
6,79,283,9,2,191,66,7293
5388 DATA 79,84,83,67,218,9,2,192,88,6
7,79,76,82,176,9,2,5666
5398 DATA 193,88,67,79,76,82,177,9,2,1
94,88,67,79,76,82,178,8254
5488 DATA 9,2,195,88,67,79,76,82,179,9
,2,196,67,79,76,79,6771
5418 DATA 82,176,9,2,197,67,79,76,79,8
2,177,9,2,198,67,79,7880
5420 DATA 76, 79, 82, 178, 9, 2, 1<J9, 67, 79, 7
6,79,82,179,9,2,288,7605
5430 DATA 67,79,76,79,82,188,24,2,224,
82,85,78,65,196,25,2,6576
5448 DATA 226,73,78,73,84,65,196,9,2,2
28,82,65,77,83,73,218,9318
5450 DATA 25,2,229,77,69,77,84,79,288,
24,2,231,77,69,77,76,7745
5468 DATA 287,57,2,234,68,86,83,84,65,
212,9,2,240,67,82,83,8276
5478 DATA 73,78,288,6,2,242,67,72,177,
8,2,243,67,72,65,67,7367
5488 DATA 212,8,2,244,67,72,66,65,211,
9,2,251,65,84,65,67,7538
5490 DATA 72,210,5,2,252,67,200,9,2,25
4,68,83,88,70,76,199,9785
5500 DATA 9,2,255,83,83,78,76,65,199,9
,3,8,68,68,69,86,4658
5518 DATA 73,195,8,3,1,68,85,78,73,212
JULY A.N.A.L.O.Q. Compucing
,9,3,2,68,67,79,3860
5520 DATA 77,78,196,9,3,3,68,83,84,65,
84,211,25,3,4,68,3927
5530 DATA 66,85,70,76,207,9,3,6,68,84,
73,77,76,207,25,3,4926
5540 DATA 8,68,66,89,84,76,207,24,3,10
,68,65,85,88,177,41,6058
5550 DATA 3,26,72,65,84,65,66,211,8,3,
64,73,67,72,73,196,6833
5560 DATA 8,3,65,73,67,68,78,287,8,3,6
6,73,67,67,79,205,6984
5570 DATA 8,3,67,73,67,83,84,193,8,3,6
8,73,67,66,65,204,6802
5580 DATA 8,3,69,73,67,66,65,200,8,3,7
0,73,67,80,84,204,7142
5590 DATA 8,3,71,73,67,80,84,200,8,3,7
2,73,67,66,76,204,7081
5680 DATA 8,3,73,73,67,66,76,280,8,3,7
4,73,67,65,88,177,6713
5610 DATA 8,3,75,73,67,65,88,178,9,3,1
92,80,82,78,66,85,6597
5620 DATA 198,9,3,253,67,65,83,66,85,1
98,8,5,128,76,66,85,6662
5630 DATA 70, 198, 9, 208, 0, 72, 80, 79, 83, 8
8,176,9,208,1,72,88,7248
5648 DATA 79,83,88,177,9,288,2,72,80,7
9,83,80,178,9,208,3,7707
5650 DATA 72,80,79,83,80,179,9,208,4,7
2,80,79,83,77,176,9,7177
5660 DATA 208,5,72,80,79,83,77,177,9,2
08,6,72,80,79,83,77,6976
5670 DATA 178,9,208,7,72,80,79,83,77,1
79,9,288,8,83,73,90,7454
5680 DATA 69,80,176,9,208,9,83,73,90,6
9,80,177,9,208,10,83,7743
5690 DATA 73,90,69,80,178,9,208,11,83,
73,90,69,88,179,8,208,9247
5760 DATA 12,83,73,90,69,205,9,208,18,
67,79,76,80,77,176,9,7274
5710 DATA 208,19,67,79,76,80,77,177,9,
208,26,67,79,76,88,77,6996
5728 DATA 178,9,288,21,67,79,76,88,77,
179,9,268,22,67,79,76,7368
5736 DATA 86,76,176,9,288,23,67,79,76,
86,76,177,9,288,24,67,7632
5748 DATA 79,76,88,76,178,9,268,25,67,
79,76,88,78,179,8,268,9144
5756 DATA 26,67,79,76,66,283,8,288,27,
86,82,73,79,218,9,268,9978
5768 DATA 29,71,82,65,67,84,284,9,288,
36,72,73,84,67,76,216,9146
5776 DATA 9,268,31,67,79,78,83,79,264,
8,216,8,65,85,68,76,7833
5786 DATA 177,8,218,1,65,85,68,67,177,
8,218,2,65,85,68,76,6636
5798 DATA 178,8,216,3,65,85,68,67,178,
8,216,4,65,85,68,76,6688
5866 DATA 179,8,216,5,65,85,68,67,179,
8,218,6,65,85,68,78,6746
5810 DATA 188,8,218,7,65,85,68,67,186,
9,218,8,65,85,68,67,6754
5828 DATA 84,264,9,216,18,82,65,78,68,
79,265,8,218,14,73,82,7886
5836 DATA 81,69,266,8,218,15,83,75,67,
84,264,8,211,6,88,79,8816
5846 DATA 82,84,193,8,211,1,86,79,82,8
4,194,8,211,2,86,65,7773
5856 DATA 67,84,264,8,211,3,88,66,67,8
4,264,9,212,6,68,77,7693
5866 DATA 65,67,84,264,9,212,1,67,72,6
5,67,84,284,25,212,2,8244
5878 DATA 68,76,73,83,84,284,9,212,4,7
2,83,67,82,79,264,9,7893
5886 DATA 212,5,86,83,67,82,79,284,9,2
12,7,86,77,66,65,83,7176
5896 DATA 197,9,212,9,67,72,66,65,83,1
97,8,212,18,87,83,89,7892
5986 DATA 78,195,9,212,11,86,67,79,85,
78,212,7,212,12,88,69,8184
5916 DATA 78,208,7,212,13,88,69,78,214
,8,212,14,78,77,73,69,7786
5928 DATA 286,6,216,6,65,78,268,7,216,
236,76,65,83,195,6,217,2208
5936 DATA 178,73,76,288,6,217,218,76,8
6,261,7,218,68,98,78,82,579
5946 DATA 176,6,218,78,98,78,177,7,218
,96,78,83,85,194,7,218,1329
5958 DATA 182,78,65,68,196,7,218,219,7
0,77,85,284,7,219,48,70,619
5968 DATA 68,73,214,9,221,64,88,76,89,
69,86,284,8,221,137,78,767
5976 DATA 76,68,48,216,8,221,141,78,76
,68,48,288,8,221,152,70,1065
5986 DATA 76,68,49,216,8,221,156,78,76
,68,49,288,8,221,167,70,1419
5998 DATA 83,84,48,218,8,221,171,76,83
,84,48,268,8,221,182,78,2887
6666 DATA 77,79,86,197,6,221,192,69,88
,288,8,221,284,69,88,88,2363
6618 DATA 49,176,6,222,265,76,79,199,8
,222,289,76,79,71,49,176,2818
6020 DATA 9,228,0,69,68,73,84,82,214,9
,228,16,83,67,82,69,7850
6030 DATA 78,214,9,228,32,75,69,89,66,
68,214,9,228,48,80,82,9164
6040 DATA 73,78,84,214,9,228,64,67,65,
83,69,84,214,9,229,80,579
6856 DATA 68,73,83,75,73,214,9,228,83,
68,83,75,73,78,214,7,8952
6060 DATA 228,86,67,73,79,214,7,228,89
,83,73,79,214,9,228,92,1687
607O DATA 83,69,84,86,66,214,9,228,95,
83,89,83,86,66,214,9,9444
6880 DATA 228,98,88,73,84,86,66,214,9,
228,116,87,65,82,77,83,9327
6690 DATA 214,9,228,119,67,79,76,68,83
,214,0,226,2,227,2,0,8280
6108 DATA 48,0,0,0,0,0,0,0,0,0,0,0,8,8
,6,8,6148
LISTING 2: ASSEMBLY
0100
SAVEttD:DMPTl.M65
0110
0120
0130
.OPT NO LIST
0140
Disk Master
0150
the Disk Editor/DisasseMbler
0160
0170
CO 1989 BY ST-LOG
0180
0190
by: Barry Kolbe
0200
and Bryan Schappel
0210
0220
0230
0240
*=
0250 1
'ASS .= PftSS+i
0260
.IF PASS=1
0270
.INCLUDE UD : 5YSE0U . M65
0280
.ENDIF
0290
0300
Zero Page Usage
0310
0320
*= $80
0330 1
li. .DS 1 ;saue x/y hold
0340 \
'2 .DS l ;areas
0350 1
'3 .DS 1
0360 J
(1 .DS 1
0370 >
!2 .DS 1
0380 >
13 .DS 1
0390 1
"MPl .DS 1 ;tenp variable
0400 1
MP2 .DS 1
0410 1
MP3 .DS 1
0420 t
IFLnG .DS 1 ;asc/internal
0430 1
.DS 2 jpntr
0440 I
.DS 2 jpntr
0450 C
TMP .DS 1 j extra te*ip
0460 «
ECL .DS 1 ;sec tt lo
0470 «
ech .DS 1 ;sec » hi
0480 1
NITS .DS l ;units digit
JULY A.M.A.L.O.G. Computing
BlL
0490
TENS .DS 1
;tens digit
1468
I
^^y
2430
0500
IV .DS 1
; inverse flag
1478
DISADL .BYTE $70 , $78, $78, $46
2440
POO
JSR
GETONE
;get input
0510
HDF .DS 1
;hex/dex flag
1488
.WORD CR2
2450
BCC
P01
: nV>
0520
ICHT .DS 1
j counter
1490
.BYTE $20, $42
2460
G0_
INT
JMP INTRO : no wau .
0530
NMD .DS 1
1500
.WORD INFOLN
2470
0540
TOTD .DS 1
1510
.BYTE $28, $00, $42
2480
P01
LDA
IBUF
;get char
0550
HXL .DS 1
;hex lo
1528
.WORD SM
2490
AND
8223
jnake upper/norn
0550
HUH .DS 1
jhex hi
1538
.BYTE $02, $02, $02, $02, $02
2500
LDX
80
; 0=f i les
0570
HKORST .DS 1
; hex/string
1548
.BYTE $02, $02, $02, $02, $02
2510
CMP
8'F
; was it F?
0580
FBYTE .DS 1
; first byte
1550
.BYTE $02, $82, $02, $82, $82
2520
BEQ
P02
j yes !
0590
MftTFLG .DS 1
;natch flag
1560
.BYTE $02, $02, $02, $02, $02
2530
CMP
8'D
; a D?
0600
LNKLO .DS 1
Jlink lo
1570
.BYTE $41
2540
BNE
POO
; no .
0610
LNKHI .DS 1
; link hi
1580
.WORD DISADL
2550
INK
;up flag
jsave type
0620
0630
SSECL .DS 1
SSECH .DS 1
jsave sec lo
jsave sec hi
1590
1600
ILO .SBYTE
2560
2570
P02
1
5TX
TYPE
'■■i. | lMJdMJi l MU■ '
0640
0650
0660
DENSITY .DS 1
5RCDRV .DS 1
DESDRV .DS 1
ADDR .DS 2
INDR .DS 2
jdensity flag
;source drive
;dest'n drive
jdisa address
; pointer
1610
1620
1630
1640
1650
.SBYTE
.SBYTE
.SBYTE
.SBYTE
.SBYTE ■
•LUMJinMiUEnK"
2580
2590
2600
2610
2620
P30
JSR
JSR
BCS
LDY
JSR
PROMPT
GETFN
GO_INT
820
CHECKFN
jdest'n device
'HCEnTEaBB"
;get nane
'■TCiZiniMTBMJI"
;bad input
0670
■■:ii:ir : ii«iiKHMiii»
;copy to pos 20
0680
■MLMIkWiMM"
;check filenane
0690
OP .DS 1
; first disa byte
1660
.SBYTE "tJilfJJ di"
2630
BCS
P30
;oops, bad one.
0700
DTEMP .DS 2
;next 2 bytes
1670
.SBYTE "sk editor »
2640
JSR
G.DRU
;get drive 8
0710
NBYTE .DS 1
j8 instr bytes
1680
.SBYTE "B3HC di"
2650
STA
DESDRV
,'save it.
0720
HXDC .DS 1
jhex/dec flag
1690
.SBYTE "sassenbler"
2660
0730
ADD_0N .DS 1
jaddress offset
1700
.SBYTE " &EE& ex"
2670
JSR
PROMPT
;want labels?
0740
L0C_5 .DS 2
;address start
1710
.SBYTE "it
2680
P40
JSR
GETONE
jget response.
0750
LOC_E .DS 2
CNTLO .DS 2
jaddress end
;counter
1720
1730
INFOLN .5BY1
2690
2700
BC5
LDA
GO_INT
IBUF
;bad one.
0760
E "— t| MjJJJjLU."
;get char
0770
DINS .DS 2
IMODE .DS 1
jdisa hold
; input node
1740
1750
.SBYTE ■
.SBYTE '
'Bi idtxniji"
2710
2720
AND
LDX
8223
80
0780
r-fm.ym.ymm-
;e=labels.
0790
MAXLEN .DS 1
jnax length
1760
1
2730
CMP
8'Y
;a Y?
0800
SRFLG .DS 1
jsrch data flag
1770
;Di
sassenbler pronpts
2740
BEQ
P41
; yes .
0810
INPLOC .DS 2
; input loc
1780
I
2750
CMP
8'N
;tpy N?
0820
BYTCNT .DS 2
jsegnent cnt
1790
PB
.BYTE "Disa Type CF/D3",8
2760
BNE
P40
; no .
0830
GETPTR .DS 1
;sec offset
1800
P3
.BYTE "Dest'n [E/P/Dnl",8
2770
INX
;l=no labels
0840
STLOAD .DS 2
;start load
1810
P4
.BYTE " Labels CY/N3",8
2780
P41
STX
LABELS?
jsave choice
0850
ENLOAD .DS 2
;end load
1820
P5
.BYTE " Source File",B
2790
•
0860
TYPE .DS 1
jdisa/f i le
1830
PI
.BYTE "Src Drive [1-81",
2800
LDA
TYPE
; files or disk?
0870
LABELS? .DS 1
;label flag
1840
P2
.BYTE " Density [1-21",
2810
BNE
F_SECS
;want disk.
0880
5. SIZE .DS 1
jsector size
1850
P6
.BYTE " Sector £1-2DG3",8
2820
JSR
PROMPT
; filenane
0890
BUFPNT .DS 2
; output pntr
1860
P7
.BYTE " 8 of Sectors", O
2830
i
0900
LINES .DS 1
jttline in bigbuf
1870
P8
.BYTE " Offset [0-7F3",0
2840
P50
JSR
GETFN
;get filenane
0910
BYTES .DS 1
j bytes gotten
1880
P9
.BYTE "Origin CO-FFFFI",0
2850
G.O
BCS
GO_INT
;bad one.
0920
SFLAG .DS 1
;source flag
1890
PA
.BYTE "Byt/Sec [7D/8O3",0
2860
LDY
80
;posit 8
0930
SECCNT .DS 2
jsector count
1900
#
2870
JSR
CHECKFN
;check Fnane
0940
SECBYTES .DS 1
j bytes/sector
1910
jINCLUDE Support Files
2880
BCS
P50
;oops.
0950
5M = $2800
;screen nenory
1920
1
2890
JSR
G.DRU
;get drive
0960
LINEO = SM+16*40
;text window
1930
.INCLUDE 8D1:DMPT2.M65
2900
STA
SRCDRU
jsave it.
0970
BIGBUF = $8000
;P: buffer
1940
.INCLUDE «Dl:DMPT3,M65
2910
JMP
DIS_IT
;and disa!
0980
PRNBUF = S03C0
1950
.INCLUDE 8DUDMPT4 ,M65
2920
J
0990
i
I960
;
2930
F_5EC5 JSR UP_INDR ;skip fnane
1000
; PRINT Macro
1970
;lntro Screen
2940
JSR
PROMPT
jsource drive
1010
i
1980
J
2950
P10
JSR
GETONE
;get response
1020
.MACRO PRINT
1990
INTRO jchill decinal
2960
BCS
GO_INT
jbad one.
1030
LDA 8 <■/.!
2000
LDX 8$FF jclear stack
2970
LDA
IBUF
;get the char
1040
LDY « >y.L
2010
TKS
2980
AND
8$7F
1050
JSR EPRINT
2020
LDA POKMSK
2990
SEC
;nake 1-8
1060
.ENDM
2030
AND tt$7F
3000
5BC
8'0
1070
I
2040
STA POKMSK
3010
BMI
P18
; <0? yes!
1080
jWork Buffers
2050
STA IRQEN
3020
CMP
89
J=>9?
1090
j
2060
LDA « <INDL ;turn on the
3030
BCS
P10
; yes.
1100
*= S2C00
2070
STA SDLSTL Jintro display
3040
STA
SRCDRV
jsave it
1110
MYBUF .DS 128
;sec work buf
2080
LDA 8 >INDL {list.
3050
f
1120
D5BUF .DS 128
jdata buffer
2098
STA SDL5TL+1
3060
JSR
PROMPT
j density
1130
INPLIN .DS 40
jinput line
2100
LDA 8$22 ;nornal PF
3070
P20
JSR
GETONE
j input.
1140
SRBUF .DS 45
jsearch buffer
2110
STA SDMCTL
3080
G.l
BCS
G.O
jbad input.
1150
IBUF .DS 45
; input buffer
2120
LDA 8$BA ;white text
3090
LDA
IBUF
jget char
1160
SRCFILE .DS 20
jsource file
2130
STA C0L0R1
3100
AND
8$7F
jnask inverse
1170
DSTFILE .DS 20
;dest'n file
2140
LDA 8$88 ;black border
3110
SEC
;nake 8-1
1180
i
2150
STA C0L0R4
3120
SBC
8'1
1190
jPrograw Start
2160
LDA 82 ;grey backgrnd
3130
BMI
P20
j<8?, yes.
1200
t
2170
STA LMARGN ;left narg=2
3140
CMP
82
j>1?
1210
*- $3000
; origin
2180
STA C0L0R2
3150
BCS
P28
j yes.
1220
START JMP INTRO
;go intro!
2190
LDA 8$94 jblue grl text
3160
STA
DENSITY
jsave density
1230
f
2200
STA C0L0R3
3170
TAX
;X=A
1240
;lntro Display L
ist
2210
I-LOO
3180
LDA
SDLO,X
jget nax sec 8
1250
i
2220
CMP 86 j start?
3190
STA
FRO
jand put it in
1260
INDL .BYTE $70 , $70, $70, $78, $70
2230
BNE T_5 ;no.
3200
LDA
5DHI,X
JFRB.
1270
.BYTE $70, $70, $70, $70, $46
2240
JMP WARM5V jyes, so long!
3210
STA
FRO + 1
1280
.WORD CREDIT
2250
T_5
CMP 85 jselect?
3220
JSR
BIN2HEX
jnake hex.
1290
.BYTE $70, $42
2268
beq go_dis jyes. disa.
3230
LDY
81
j copy nax 8
1300
. WORD ILO
2270
CMP 83 ; option?
3240
D.CP LDO
LBUFF, V
J into the next
1310
.BYTE $02, $70, $06, $28
2280
BNE I_LOOP ;no, loop
3250
STA
P6+10, Y
j pronpt .
1320
•BYTE $06, $28, $06, $41
2290
JMP DISKED ;Disk Editor.
3260
INY
1330
.WORD INDL
2300
;
3270
CPY
84
1340
,
2310
jDi
sassenbler Data Entry
3280
BNE
D.CP
1350
;Info Display Li
St
2320
i
3290
i
1360
»
2338
G0_
DIS LDA 8 <INFODL J install
3300
JSR
PROMPT
j sector
1370
INFODL .BYTE $78
,$70, $78, $46
2340
STA SDLSTL ; the data
3310
P60
JSR
5PC_NUM
jget nunber
1380
.WORD CR2
2350
LDA 8 >INFODL ; entry DLIST
3320
BCS
G.l
1390
.BYTE $06, $40, $42
2360
STA SDLSTL+1
3330
JSR
TE5TFR0
j in range?
1400
.WORD SM+40
2370
JSR CLRSCN jclear screen
3340
BCS
P60
j no.
1410
.BYTE $02, $02, $02, $02, $02
2380
LDA 8 <P0 ;point to the
3350
LDA
FRO
j yes, so we
1420
.BYTE $02, $02, $02, $02, $41
2390
STA INDR j first pronpt
3360
STA
5ECL
jsave the sector
1430
■WORD INFODL
2400
LDA 8 >P0
3370
LDA
FRO + 1
jnunber for
1440
,
2410
STA INDR+1
3380
STA
SECH
j later .
1450
; Disassembler Di
splay List
2420
JSR PROMPT jDiSk/Files
3390
i
JULY A.N.A.L.O.Q. Computing
35
TO
3400
JSP.
PROMPT
jasecs
4366
BEQ
E.DN
; i f 0, all done
5320
G_SCR LDA COLCRS j get xpos
3410
P70
JSR
5PC_NUM
;get nunber
4370
JSR
E.PUT
;put the char
5330
LDY ROHCRS
;and ypos
3420
G.2
BC5
G.l
;bad one.
4380
INC
E.LP+1
jbunp pointer
5340
CLC
;add line addr
3430
LDft
FRO
;is nunber 0?
4390
BNE
E.LP
5350
ADC GL,Y
3440
ORft
FR0 + 1
4400
INC
E.LP+2
5360
STA INPLOC
3450
BEG
P70
;yes, that's bad
4410
BNE
E.LP
;and loop
5370
LDA GH,Y
3460
LDA
FRO
jsave the nunber
4420
E.DN RTS
;so long.
5380
adc ao
3470
STA
SECCNT
jof sectors for
4430
j
5390
STA INPLOC+1
3480
CLC
; later & add on
4440
;E: Put
byte routine
5400
LDY B20
;zap 21 chars
3490
ADC
5ECL
jstart sector
4450
i
5410
lda ao
;a space
3500
STA
FRO
;so we can test
4460
E.PUT CMP 8E0L
; is it a CR?
5420
G_CLR STA CINPLOO.Y ;on screen
3510
LDft
FR0+1
;to see if too
4470
BNE
E.EOL
;no.
5430
DEY
;down counter
3520
STA
5ECCNT+1
jnany see's
4480
PUTCR LDA LMARGN
;set xpos to
5440
BPL G-CLR
.;and loop
3530
ADC
SECH
j will be read.
4490
STA
COLCRS
;the Margin
5450
RTS
;so long.
3540
STA
FR0 + 1
4500
INC
ROHCRS
jbunp ypos
5460
I
3550
JSR
TESTFRO
;in range?
4510
JMP
SCROLL
jcheck scroll
5470
;Get 1 byte via
INPUT
3560
BC5
P7G
; no way.
4520
;
5480
i
3570
•
4530
E.EOL JSR ASC2IC
;nake icode
5490
GETONE JSR G_5CR ;clear line
3580
JSR
PROMPT
;of fset
4540
PHA
;save it
5500
ldy ao
; force text node
3590
P80
JSR
SPC_NUM
;get nunber
4550
LDV
ROHCRS
jget ypos
5510
STY IMODE
3600
BCS
G.2
4560
LDA
GL, Y
j look up the
5520
INY
;1 char
3610
LDA
FR0 + 1
;test hi byte
4570
STA
L
jaddress of this
5530
JMP INPUT
jget input
3620
BNE
P80
;>? yes!
4588
LDA
GH,Y
;line and store
5540
i
3630
LDA
FRO
;get lo byte
4590
STA
L+l
;in tenp area
5550
;Get a Filenane
3640
CMP
8S80
;=> $80?
460O
PLA
jget char back
5560
j
3650
BCS
P80
;yes.
4610
LDY
COLCRS
;get xpos
5570
GETFN JSR G_SCR
;zap line
3660
STA
GETPTR
;save for later
4620
5TA
CD ,Y
;on screen!
5580
LDY ao
; force text node
3670
j
4630
1
5590
STY IMODE
3680
JSR
PROMPT
; origin
4640
INV
j up xpos
5600
LDY ai5
;get 15 chars
3690
P90
JSR
SPC_NUM
;get nunber
4650
CPY
«39
;at rnargn?
5610
JMP INPUT
3700
BCS
G.2
4660
BCC
E.LU
;no.
5620
1
3710
LDA
FRO
jcopy the nun
4670
BEQ
E.LU
j just there.
5630
;Special get nunber
3720
STA
ADDR
jinto the addr
4680
INC
ROHCRS
jnext line
5640
i
3730
LDA
FR0+1
; for the disa-
4690
JSR
SCROLL
;scroll screen
5650
SPC_NUM JSR G_SCR ;zap line
3740
STA
ADDR+1
;ssenbler.
4700
LDY
LMARGN
;get nargin
5660
JMP G-NUM
;get a nunber
3750
J
4710
E.LU STY C0LCR5
;set xpos
5670
1
3760
JSR
PROMPT
;sector size.
4720
RTS
;and leave
5680
;Test FRG for sector range
3770
PAS
JSR
SPC_NUM
;get nunber
4730
j
5690
f
3780
BCS
G.2
4740
i Check
to see if
screen nust
5700
TESTFRO LDA FRO
;is FRO a o?
3790
LDA
FRO + 1
;no hi byte
4750
;be scrolled.
5710
ORA FR0+1
3800
BNE
PA0
; allowed !
4760
J
5720
BEQ T.ERR
jyes!
3810
LDA
FRO
jtest lo byte
4770
SCROLL
-DY ROHCRS ;get ypos
5730
LDX DENSITY
;get density
3820
CMP
8125
;125 bytes?
4780
CPY
tt21
;at line 21?
5740
LDA FR0+1
jcheck to see
3830
BED.
G.SZ
;yes!
4790
BCC
S.NO
jno.
5750
CMP SDHI,X
;if the sector
3840
CMP
»128
J128 bytes?
4800
LDA
8 <SM
;get the addrs
5760
BCC T.GD
;nunber in fro
3850
BNE
PAO
; no .
4810
5TA
T
jof line & 1
5770
BEQ T.LO
; is allowed.
3860
G.SZ
;save size
4820
LDA
« >SM
5780
BCS T.ERR
3870
t
4830
STA
T + l
5790
T.LO LDA FRO
3880
;Disassenbly Entry Point
4840
LDA
a <:sm+4Q]
5800
CMP SDL0,X
3890
j
4850
STA
L
5810
BCC T.GD
3900
DIS
_IT
JSR CLRSCN ;zap screen
4860
LDA
a >[SM+4Q1
5820
BEQ T.GD
3910
STY
SFLAG
jclear flag
4870
STA
L+l
5830
T.ERR SEC
jsignal error
3920
LDA
« <DI5ADL ; install the
4880
LDX
ao
jline counter
5840
RTS
3930
STA
SDLSTL
;disa DLIST
4890
S.M1 LDY »39
;now nove 1 line
5850
T.GD CLC
;signal good
3940
LDA
8 >DISADL
4900
S.M2 LDA CLJ.V
jup 40 bytes
5860
RTS
3950
STA
SDL5TL+1
4910
5TA
CT),Y
5870
f
3960
JSR
OPENIN
;open input
4920
DEY
5886
jCheck Filenane
for Dx:
3970
JSR
OPENOUT
;open output
4930
BPL
S.M2
5890
j
3980
t
4940
LDA
L + l
;now update the
5900
CHECKFN LDA IBUF ; get 1st char
3990
D_L00P J5R DISAMEM J do instr.
4950
STA
T + l
jpointers .
5910
CMP BEOL
;is it EOL?
4000
JSR
PRINT. IT
;print it
4960
LDA
L
5920
BEQ CH.B
;yes.
4010
LDA
140
;clear counter
4970
STA
T
5930
CMP 8'D
; is it 'D'?
4020
STA
BVTES
4980
CLC
5940
BEQ FN.D
jyes.
4030
LDK
8$FF
;get a $FF
4990
ADC
84
5950
CMP a-p
; is it 'P'?
4040
C_L00l
;key press?
5000
STA
L
5960
BEQ CH.C
jyes.
4050
CMP
aSFF
5010
LDA
L + l
5970
CMP a'E
;is it 'E'?
4060
BED.
D_L00P
f no.
5020
ADC
ao
5980
BNE CH.B
J no.
4070
STX
CH
clear CH
5030
STA
L + l
5990
CH.C LDA a 1 :
jnake 2nd char
4080
CMP
828
; escape?
5040
INX
;up line count
6000
STA IBUF+1
a ' : ' and the
4098
BNE
T.SPC
no.
5050
CPX
a2i
;at end?
6010
LDA 8E0L
J3rd char an EOL
4100
END
IT STX CH
clear CH and
5060
BNE
S.Ml
;no way.
6020
STA IBUF+2
4110
JMP
D_OUER
exit.
5070
DEC
ROHCRS
idee ypos
6030
CH.R LDX ao
jzero index
4120
I
5080
5. NO rt;
;and leave
6040
CH.L LDA IBUF,X
jget input char
4130
T.SPC CMP 833
Space=pause
5090
J
6050
STA SRCFILE,
Y jsave in buf
4140
BNE
D_LOOP
5100
;Print c
Pronpt
6060
INY
jup buf index
4150
I
5110
t
6070
INX
jup input indx
4160
K.HAIT LDA CH
get keypress
5120
PROMPT JSR PUTCR
jprint CR
6080
CPX 820
j done 28 yet?
4170
CMP
828
escape?
5130
LDA
a$4o
force uppercase
6090
BNE CH.L
j no.
4180
BEQ
END. IT
yes, exit
5140
STA
SHFLOK
6100
CLC
jsignal good.
4190
CMP
833
wait for spc
5150
LDA
ao
and no inverse
6110
RT5
jand leave.
4200
BNE
K.HAIT
to stop the
5160
STA
INUFLG
6120
1
4210
STX
CH
pause .
5170
LDA
INDR
get addr of
6136
FN.D LDA IBUF+2
jget 3rd char
4220
JMP
D_LOOP
loop again.
5180
LDY
INDR+1
the pronpt
6140
CMP 8" :
j 3rd char a ■ : ' ?
4230
f
5190
J5R
EPRINT
print it
6150
BNE CH.B
jno, bad nane
4240
;Get dri
ve nunber
5200
LDA
a* :
;put a ' : ■
6160
LDA IBUF+1
jget drive 8
4250
;
5210
JSR
E.PUT
6170
CMP 8'1
j less than 1?
4260
G.DRV LDA IBUF+1
;get char
5220
LDA
a$20
; and a space
6180
BCC CH.B
jyes.
4270
SEC
set carry
5230
JSR
E.PUT
6190
CMP 8'9
j greater than 8?
4280
SBC
Jt'8
subtract '0
5240
JSR
G_SCR
clear line
6200
BCC CH.R
4290
RTS
and leave
5250
UP_INDR
LDA INDR
;add 16 to get
6210
CH.B SEC
jsignal bad
4300
i
5260
CLC
to the next
6220
RTS
4310
JE:
Print routine
5270
ADC
aie
pronpt.
6230
i
4320
t
5280
STA
INDR
6240
;Dunp Editor Screen to Printer
4330
EPRINT STA E.LP+1 jsave 10 byte
5290
BCC
UP_HI
6250
■
4340
STV
E.LP + 2 1
save hi byte
5300
INC
INDR+1
6260
DMPSCN JSR PRNLFD
4350
E.LP LDC
SFFFF j
get char
5310
UP_HI RTS
so long.
6270
BMI PRERR
JULY A.M.A.L.O.G. Computing
fgk
LDA 8 <BORDER ;print top
LISTING 3: ASSEMBLY
1020
1030
1040
• SB'
• SB'
• SB!
6280
■TE "m:i;m it
fTE "Q-read Q-up
fTE "Q-dn B-edit "
6298
LDY 8 >BORDER ;border
1050
•SBYTE "C-write "
6388
JSR DMPSUB
0100
; SAVE8D:
1060
•SBYTE "ffl-undo d-8base "
6310
BMI PRERR
0110
OPT NO LIST
1070
• SBYTE "0-chars 0-bfill ■■
6328
6330
LDA «8
STA T
jcount lines
0120
0130
1088
1090
•SBYTE "B-eor "
•SBYTE "Q-trace Q-file8 »
;of sectr info
,
6340
DMLP
;get index
0140
; Disk Master part 2 ;
1100
.SBYTE "B-link8 E-dens "
6358
LDA GL,X
jLo/Hi bytes
0150
; by: Barry Kolbe ;
1110
.SBYTE "C-Menu "
6368
6370
LDY GH,X
JSR DMPSUB
jline address
;print it
0160
fC3 1989 ;
1120
1130
.SBYTE "g-serch [J-HVD "
0170
. SBYTE "H - D H
M-inpuT "
6380
BMI PRERR
0180
1140
.SBYTE "H-sorce "
6398
INC T
;next line
0190
;Graphics Display List
1150
.SBYTE "H-destn Q-rfrsh "
6488
LDA T
0200
1160
.SBYTE EOL,"-
abort Q-hue t "
6418
CMP 816
;done 16?
0210
GRODL .BYTE $
1170
. SBYTE "fl-lUM t "
6420
bne DMLP ;nope
LDA 8 <STATU5 jprint
LDY 8 >STATUS jstatus line
JSR DMPSUB
0220
8238
0240
0250
WORD CRl
BYTE $10, $42
WORD BORDER
BYTE $42
1180
1190
1200
1210
PRLINE
• SB1
. SB1
SBYTE "■
6430
IJJ±-tM'IilIK;MC l
6440
HE "LMijli lif <Tt<"
6450
TE "trUJJJil
6460
BPL DMOK
;Y has error
0268
WORD SM
1220
,
6470
PHERR JMP IOERR
;dble return
8278
BYTE 2,2,2,2,2
1230
;The Beginning of
the
6480
DMOK RT5
0280
BYTE 2,2,2,2,2
1240
jDi
5k Editor
6490
i
0290
BYTE 2, 2, 2, 2, 2, $10
1250
1
6500
;Pr
inter Linefeed
0300
BYTE $01
1260
DISKED JSR CLRSCN
jclear screen
6510
;
0310
OLDD
.WORD CONT ;flip botton
1270
JSR
ERAINP J
clear input
6520
PRNLFD LDA
0320
CONT
.BYTE $42 ;of screen
1280
LDA
8 <GRODL
jset up DL
6530
STA PRNBUF
0330
WORD STATUS ; f or HELP
1290
STA
SDLSTL
6540
LDA 8E0L
0340
BYTE 0,2 jscreen at
1300
LDA
8 >GRODL
6550
STA PRNBUF+1
0358
BYTE $30, $42
1310
STA
SDLSTL+1
6560
BNE SAP
0360
WORD INPLIN
1320
LDA
8 <CINPLIN+63
6570
I
0370
BYTE $10, $42
1330
STA
INPLOC
6580
;Pr
int a Line using SIO
0388
WORD LINEO
1340
LDA
8 > CINPLIN + 63
6590
t
8390
BYTE $20, $42
1350
STA
INPLOC+1
6600
DMPSUB STA L
;save address
0480
WORD PRLINE
1360
LDX
80 ;
initialize
6610
STY L+l
; for indirect
0410
BYTE $41
1370
STX
SRFLG
6620
LDY 80
0420
WORD GRODL
1380
STX
5ECH
6636
DML
LDX 88
;use as an
0430
■
1390
STX
AIFLAG ;
A5C/INT flag
6640
STX TMP1
; inverse flag
0440
;The
Help Screen Display
1400
STX
HDF ;
hex/dec flag
6650
LDA CL3,Y
;get byte
0450
;Code used by HELPME
1410
STX
HXORST ;
input flag
6666
BPL DMJ
; inversed?
0460
*
1420
STX
DEN5ITY ;
0=sngl 1 =dbl
6670
INC TMP1
;yes-set flag
0470
HELPDL .BYTE $42
1430
INX
6680
DMJ
AND 8$7F
;nask it off
0488
.WORD HELPS
1440
STX
SECL
6690
CMP 8123
;skip control
8490
.BYTE 0,2, 2, 2, 2, 2, $41
1450
STX
SRCDRU
6700
BC5 PERD
; characters
0500
.WORD GRODL
1460
STX
DE5DRU
6710
CMP 896
0510
,
1470
STX
IMODE
6728
BCS PRK
0520
; Low
and High bytes of
1488
JSR
DOLEFT J
show border
6738
CMP 864
0539
jscreen Lines *
1490
LDA
80 i
show enpty
6748
BCS PERD
8540
,
1500
JSR
BFC
6750
CLC
jchange to
0550
GL
.BYTE <SM, <CSM+403
1510
JSR
MASIN
6760
ADC 8$2B
JATASCII
0560
.BYTE <[SM+8B3, <USM+I203
1520
JG
JSR
C-OFF
6770
PRK
LDX TMP1
;was it inverse?
0570
.BYTE <C5M+1603, < CSM+2003
1530
JSR
GETCOM ;
get conand
6780
BEQ PORK
j no
0580
.BYTE <tSM+2403, < C5M+2803
1540
JSR
ERAINP i
zap input
6798
ORA 8$80
;add back in
0590
.BYTE <[SM+3203, <[SM+3603
1550
JMP
JG j
More
6880
BNE PORK
0600
.BYTE <CSM+4O03, <CSM+4403
1560
;
6818
PERD LDA «' .
; ' . ' for contrls
0610
.BYTE <CSM+4803, <[SM+5203
1570
;Get a Connand
6820
PORK STA PRNBUF,
Y ;into buffer
0620
.BYTE <[SM+5603, <C5M+6003
1588
i
6830
INY
0630
.BYTE <[5M+6403, <CSM+6803
1598
GETCOM LDA CH
force uppercase
6840
CPY 8$27
;done w/line?
0640
.BYTE <:SM+7201, < [SM+7603
16O0
CMP
8$FF
6858
BNE DML
; no
0650
.BYTE <[SM+80B3, <[SM+8403
1610
BEQ
GETCOM ,
get key
6860
LDA 8E0L
:add EOL
0660
.BYTE <CSM+8803, <C5M+9203
1620
LDX
8$FF
6878
STA PRNBUF+$27
0670
i
1630
STX
CH
6880
.
0686
GH
.BYTE >5M, >[SM+403
1640
PHA
,
save it
6890
5AP
LDX 8SBB
;copy cuds
0690
.BYTE >:SM+803, > [SM+1203
1650
LDA
8 <CONT ,
reset DLIST
6900
SIP
LDA PSIOCB, X
;to DDEVIC
0700
.BYTE > CSM+1603 , > ISM+2003
1660
STA
OLDD
6910
6920
6930
STA $0300 , X
0710
.BYTE >CSM+2403, > C5M+2803
1670
LDA
8 >CONT
DEX
0720
.BYTE >tSM+3203, > CSM+3603
1680
STA
OLDD+1
BPL SIP
0730
■BYTE > [SM+4003 , > CSM+4403
1690
PLA
,
get key
6940
JSR SIOV
;let SIO print
0740
.BYTE >ISM+4803, > CSM+5203
1780
LDX
826 ,
check it
6950
6960
6970
RTS
0750
.BYTE >CSM+5603, > ESM+6003
1710
CC1
CMP
COMKEY,X
,
0760
.BYTE >CSM+6403, > CSM+6803
1720
BEQ
CC2 ,
valid
PSIOCB .BYTE $48
; printer
0770
•BYTE >C5M+7203, > ISM+7603
1730
DEX
6980
.BYTE $01
junit 1
0780
.BYTE >CSM+8003, > CSM+8403
1740
BPL
CC1
6998
.BYTE $57
; write
0790
.BYTE >[5M+8803, > CSM+9203
1750
BMI
GETCOM J
overs
70OO
.BYTE $80
;send bit 7=out
0800
)
1760
CC2
TXA
J
x 2 for offset
7010
•WORD PRNBUF
jbuffer
0810
CREDIT .SBYTE "disk Master "
1770
A5L
A
7020
.WORD $30
jtine out
0820
.BYTE "HcI",0,"O.YXY"
1788
TAX
7030
.WORD $28
;buf length
0830
CRl
•SBYTE " disk "
1798
ASL
A
7040
.BYTE $4E
;nornal prnt
0840
•SBYTE "editor
1800
TAY
7050
.BYTE $00
; unused
0850
CR2
•SBYTE " disk dis"
1810
CPY
840
7060
0860
•SBYTE "assenbler "
1820
BCC
N40
7070
;Get Label Data
0870
•SBYTE " data "
1830
LDY
840
7088
0880
•SBYTE "entry
1840
N40
JSR
SHO_COM
7090
•INCLUDE 8D
DMPT5.M65
0890
•
1850
LDA
COMTAB,X
;get address
7100
0900
STATUS
I860
STA
JOFF+1 ,
of routine
7110
jFi
nd where progran ends
0910
.SBYTE "DSBH ■HQEBiMB"
1870
LDA
COMTAB+1,
X
7120
0920
. SBYTE "hi'iiJB H"
1880
STA
JOFF+2
7130
.OPT LIST
EHDPROG S *
0930
0940
DRLIN .SB"
1890
1900
JSR ERATXT ,
JOFF JSR SFFFF ,
window
7140
'TE "E33EHBIMKE"
carry out
7150
.OPT NO LIST
0950
.SBYTE "tu3HI ■■ULLfiJM
1910
I
7160
7170
;Add Run address
0960
0970
i
• SBYT
"QIEffilHH"
1920
1930
C_OFF LDY 840
7180
0980
;Help Screen
1940
;Show the Connand
7198
*= RUNAD
.WORD START
0990
1000
HELP5 .SB
1950
1960
SHO
_COM
TXA
7288
'tf ■•iiinmkuiJJiiMi!]"
7218
.END
1010
• SBYT
"^HTODlT^^^^^nTW'l"
1970
PHA
JULY A.IM.A.L.O.O. Compucing
ft4
1980
LDX no
2950
1
3920
LDA
GH
1990
SHC LDA CTXT,Y
2960
G_HEX LDA 81
jhex Mode.
3930
STA
T + l
2080
STA INPLIN,X
2970
STA
IMODE
3940
LDX
80
2010
INY
2980
LDY
832
J 32 chars Max
3956
LFB
LDY
80
jleft coluMn
2020
INK
2990
JSR
INPUT
;get input.
3960
LDA
LEFTB,X
2030
CPX 84
3000
BCC
MEV
jok?
3976
STA
CT) ,Y
2040
BNE SHC
3010
RTS
; no.
3986
STY
Yl
2050
LDA 8$9A
3020
MEV
LDX
80
;get length of
3990
LDY
828
jrepeat in
2060
STA INPLIN+4
3030
G4E
LDA
IBUF,X
;the input.
4000
STA
CT) ,Y
; Middle
2070
PLA
3040
CMP
8E0L
4010
LDY
Yl
2080
TAX
3050
BEQ
G4L
4020
INX
;over 1
2890
RTS
3060
INX
4030
INY
2100
•
3070
BNE
G4E
4040
LDA
LEFTB.X
jcoluMn 2
2110
;CoHHand Keys
3080
;
4050
STA
CT) ,Y
2120
•
3090
G4L
TXA
;is the input
4060
STY
Yl
2130
COMKEY .BYTE $2A, $39, $22, $15, $01
3100
AND
81
j even?
4070
LDY
829
;and in Middle
2140
.BYTE $38,$3E,$00,$28,$2E
3110
BEQ
G4R
jyes!
4080
STA
CT) ,Y
2150
•BYTE $12,$23,$66,$0B,$08
3120
;
4090
LDY
Yl
2160
.BYTE $3A,$36,$76,$0E,$06
3130
LDX
843
jno. add a
4100
JSR
ADD48
jdown 1 line
2170
.BYTE SOD, $2B, $10, $37, $25
3140
MDN
LDA
IBUF,X
; leading zero
4110
INX
2180
.BYTE $B6,$8A
3150
STA
IBUF+1,X
jto the input
4120
CPX
832
J16 lines?
2190
1
3160
DEX
;buf fer.
4130
BNE
LFB
2200
;Get a Key
3170
BPL
MDN
4140
RTS
2210
t
3180
LDA
8'0
4150
I
2220
GETKEY LDA $E425 ; the easy way
3190
STA
IBUF
4160
;Add 40
onto po
inter to
2230
PHA ;to get keys
3200
G4R
LDX
80
; input pntr
4170
;Move down one
line
2240
LDA $E424 J frOM the OS!
3210
LDY
80
; output pntr
4180
J
2250
PHA
3220
GH2
LDA
IBUF,X
jget chap
4190
ADD40 LDA T
2260
RTS
3230
CMP
8E0L
;all done?
4200
CLC
2270
,
3240
BEQ
GHID
;yes!
4210
ADC
8$28
2280
;Get Input until Escape or
3250
STA
HXH
jsave it
4220
STA
T
2290
; RETURN is pressed
3260
INX
;get next char
4230
BCC
A40
2300
f
3270
LDA
IBUF,X
4240
INC
T+l
2310
INPUT STY MAXLEN jsave length
3280
STA
HXL
jsave it
4250
A40
RTS
2320
LDY 80 jcounter
3290
STX
X3
;save x
4260
1
2330
INLOOP STY Y2 jsave it
3360
STY
Y3
jsave y
4270
jDi
splay the Sector Data
2340
LDA 8$80 j cursor is a
3310
J5R
HEX2BIN
;Make binary
4280
•
2350
STA CINPL0C),Y ;blOCk.
3320
LDY
Y3
jget Y
4290
SHWSEC LDA GL
; start at top
2360
JSR GETKEY ;get a key
3330
LDX
X3
jget X
4300
STA
T
2370
LDY Y2 ;restore Y
3340
STA
IBUF.Y
jsave binary
4310
LDA
GH
2380
CMP ttEOL ;is it EOL?
3350
INY
;up Y
4320
STA
T + l
2390
BEQ INDONE jyes!
3360
INX
;up x
4330
LDA
82
jy pos -2
2400
CMP 827 ; is it E5C?
3370
BNE
GH2
;and loop
4340
STA
Y2
2410
BNE NOESC ;N0!
3380
GHID CLC
jsignal good
4350
LDA
HDF
;hex or dec?
2420
SEC jsignal abort
3390
RTS
j later.
4360
BEQ
H9
JHEX
2430
RTS ;so long.
3400
I
4370
JMP
SDEC
2440
NOESC CMP 8126 jdelete?
3410
;Get a Nunber
4380
H9
LDY
80
2450
BNE NODEL J nope .
3420
i
4390
HI
JSR
ZFR
2460
CPY 80 ;on 1st char?
3430
G_HUM LDA Ml
jhex Mode.
4400
STY
Yl
2470
BEQ INLOOP jyes!
3440
STA
IMODE
4410
LDA
MYBUF,Y
jget a byte
2480
LDA 80 jreMove cursor
3450
LDY
84
;4 chars
4420
STA
FRO
2490
STA CINPLOC),Y
3460
JSR
INPUT
;grab it.
4430
JSR
BIN2HEX
jto hex
2500
DEY ;decrease cntr
3470
BCC
GNK
;good?
4440
INC
Yl
2510
BPL INLOOP ,-and loop
3480
RTS
;no.
4450
LDY
Y2
jscreen pos Y
2520
;
3490
GNK
JSR
ZFR
jzap FRO
4460
INY
2530
NODEL LDX IMODE ;get node?
3500
TAY
;Y =
4470
LDA
LBUFF+2
;hi byte of hex
2540
BEQ IS_OK ;string Mode.
3510
G4L00I
Y jget a char
4480
JSR
ASC2IC
2550
AND 8$7F jMask inverse
3520
CMP
8E0L
;done?
4490
STA
CT) ,Y
jshow it
2560
CMP 8'9+l ;>9?
3530
BNE
TESTIT
;nope.
4560
LDA
LBUFF+3
jnow low byte
2570
BCC ITS jno.
3540
G4G
CLC
jsignal good
4510
JSR
ASC2IC
2580
AND 8223 ; Make uppercase.
3550
RTS
;spater .
4520
INY
2590
ITS JSR CHEX ;is legal?
3560
j
4530
STA
m,Y
2600
CPX 88 jtest X.
3570
TE5TIT JSR
jget value
4540
INY
2610
BPL I5_0K ; legal!
3588
ASL
FRO
J*2
4550
STY
Y2
2620
BMI INLOOP ;no good.
3590
ROL
FRO + 1
4560
CPY
826
jend of line?
2630
J
3600
ASL
FRO
J*4
4570
BEQ
H4
jyes
2640
IS_OK CPY MAXLEN ; at Max len?
3610
ROL
FRO + 1
4580
H5
LDY
Yl
jend of buffer?
2650
BEQ INLOOP ;yes.
3620
ASL
FRO
;*8
4590
CPY
8$80
2660
STA IBUF.Y jno save char
3630
ROL
FRO+1
4660
BNE
HI
j no
2670
JSR ASC2IC ;and put it
3640
ASL
FRO
J*16
4610
RTS
2680
STA CINPL0C3,Y Jon screen
3650
ROL
FR0+1
4620
H4
JSR
ADD40
jdown 1 line
2690
INY jup cntr
3660
TXA
jget value
4630
LDA
82
jreset LMargin
2700
BNE INLOOP jand loop.
3670
ORA
FRO
jadd to FRO
4640
STA
Y2
2710
J
3680
STA
FRO
jsave it
4650
JMP
H5
2720
INDONE STA IBUF,Y J save EOL
3690
INY
jup count
4660
2730
LDA 80 ;erase cursor
3700
BNE
G4L00P
jand loop
4670
jShow Sector in
DeciMal Mode
2740
STA CINPLOC),Y
3710
I
4680
Jlf
'tens' digit is inversed
2750
CLC ;show good.
3720
;CIear out Screen Menory
4690
Jthe nunber is over 200. if the
2760
RTS jboogie.
3730
#
4700
; ' units
digit is inversed the
2770
,
3740
CLRSCN LDA 80
4710
; nuMber
is between 100 and 200
2780
;Erase Input Line
3750
LDY
80
4720
2790
,
3760
CLR5 !
4730
SDEC 1
2800
ERAINP LDA 80
3770
STA
SM+$01Ofl
,Y
4740
INC
Y2
J3
2810
LDX 834
3788
STA
SM+$0200
,Y
4750
SD1
LDA
8$FF
jset inverse
2820
ER1 STA INPLIN+5,X
3790
STA
5M+$0300
,Y
4760
STA
XV
jflag
2830
DEX
3800
INY
4770
LDA
MYBUF,Y
jget byte
2840
BPL ER1
3810
BNE
CLR5
4780
INY
2850
RTS
3820
LDA
LMARGN
4790
STY
Yl
jsave buf pos
2860
1
3830
STA
COLCRS
4800
CMP
8200
jover 200?
2870
;Get a String
3840
TYA
4810
BCC
DD1
2880
t
3850
STA
ROHCRS
4820
SEC
j- 200
2890
G_STR LDA 80
3860
RTS
4830
SBC
8260
2900
STA IMODE
3870
,
4840
INC
IV
jset flag
2910
LDY 833
3880
jShow the Screen
Borders
4850
INC
IV
jto 1
2920
JMP INPUT
3890
j
4860
BNE
DD3
2930
;
3900
DOLEFT LDft
(first line
4870
DD1
CMP
8160
j over 160?
2940
;Get a Hexstring
3910
STA
T
jof Menory
4880
BCC
DD3
JULY A.IM.A.L.O.Q. Computing
jfok
4898
SEC
5860
; Do
heading of "ATASCII" or
6830 .WORD SEARCHS ;search
4900
SBC »100
5870
; "INTERNAL" code
6840 .WORD SLINKS Mink 8
4910
INC IV
;set flag to
5880
;
6850 .WORD READS
:read sec
4920
DD3
LDX 8"0
jdefault '00'
5890
MASIN LDX 87
6860 .WORD WRITES jwrite sec
4930
STX TENS
5900
LDA
AIFLAG ;get flag
6870 .WORD AIFLIP Jflip chars
4940
STX UNITS
5910
BNE
IN jno, internal
6880 .WORD HDFLIP J flip 8's
4950
DD5
CMP 8$0A
;over 10?
5920
LDX
815
6890 .WORD HELPME ihelp scrn
4960
BCS DD4
;yes
5930
IN
LDY
87 ;copy header
6900 .WORD UNDO
jundo
4970
CLC
5940
MAI
LDA
INMS,x jon screen
6910 .WORD CHNSRC J src drive
4980
ADC UNITS
;add units digit
5950
STA
BORDER+30, Y
6920 .WORD CHNDES ; dest drive
4990
STA UNITS
5960
DEX
6930 .WORD KOLOR
;next hue
5000
LDY IV
;see if any are
5970
DEY
6940 .WORD REFRESH jclear scrn
5010
BMI DD2
; inversed
5980
BPL
MAI
6950 .WORD D0WN1
;sec=sec-l
5020
LDA UNITS, Y
;do inverse
5990
RTS
6960 .WORD UP1
;sec=sec+l
5030
ORA 8$80
6000
,
6970 .WORD HEXSTR Jinput flip
5040
STA UNITS, Y
6010
jDi
splay the Sector Data
6980 .WORD TRACES jtrace link
5050
DD2
LDY Y2
;get screen pos
6020
;
6990 .WORD CHNDEN5 jnew density
5060
LDA TENS
;conuert to
6030
5ECINI
7000 .WORD LUMIN
j luninance
5070
JSR A5C2IC
;screen code
6040
STA
FRO
7010 .WORD INTRO
i Menu screen
5080
STA CT),Y
6050
LDA
SECH
7020 .WORD REFRESH ;clear scrn
5090
INY
6060
STA
FRO + 1
7030 .WORD DMP5CN jprnt scrn
S1O0
LDA UNITS
;sane for
6070
LDX
85 ;at position 5
7040 ;
5110
JSR ASC2IC
;units digit
6080
JSR
PHI ;put it on.
7050 {Routines
5120
STA CT),Y
6090
LDA
MYBUF+127 ;8 of bytes
7060 ;
5130
INY
jMoye right
6100
STA
FRO
7070 ;Show Sector as
ATASCII CO) or
5140
INY
6110
LDX
835 jposit. 35
7080 {Internal Code CI)
5150
STY Y2
6120
JSR
PH2 jput it on.
7090 ;
5160
CPY 827
;done w/Iine?
6130
LDA
MYBUF+125 ;file 8
7100 AIFLIP LDA AIFLAG
5170
BEG DD6
6140
LSR
A jis in the
7110 EOR 81
5180
DD7
LDY Yl
jdone with
6150
LSR
A ; 6 hi bits
7120 STA AIFLAG
5190
CPY «$80
; sector?
6160
STA
FRO
7130 JMP ASCINT
5200
BNE SD1
6170
LDX
815 jposit. 15
7140 ;
5210
RTS
6180
JSR
PH2 ;display.
7150 jShow Sector as
Hex CO) or
5220
DD6
JSR ADD40
jnext line
6190
LDA
MYBUF+126 jsector link
7160 ;Decinal CI) data
5230
LDA 83
6200
STA
FRO ;low
7170 j
5240
STA Y2
;reset LMargin
6210
LDA
MYBUF+125 ;sector link
7180 HDFLIP LDA HDF
5250
BNE DD7
6220
AND
83 ;high
7190 EOR 81
5260
DD4
SEC
;get tens digit
6230
STA
FRO+1
7200 STA HDF
5270
SBC 8$0A
6240
LDX
825 ;posit 25
7210 JMP SHWSEC
5280
INC TENS
6250
LDA
SRCDRv ;get source
7220 ;
5290
BNE DD5
6260
ORA
8$90 jnake inverse
7230 jEdit the sector
:Set INP to
5300
RTS
6270
STA
DRLIN+5 ;on screen
7240 jHChex) or S Cstr
ing) input
5310
1
6280
LDA
DESDRU ;dest drive
7250 ;
5320
;5how Data as ATASCII or
6290
ORA
8$90
7260 EDITS JSR G_NUM
;get start byte
5330
; Internal Code
6300
STA
DRLIN+15 ;on screen
7270 BCC EE1
5340
i
6310
LDA
DENSITY ;disk density
7280 EDN RTS
5350
ASCINT J5R MASIN
;show type
6320
CLC
7290 EE1 LDA FRO+1
;is the 8<$80?
5360
LDA GL
;top line
6330
ADC
8$91
7300 BNE EDN
5370
STA T
6340
STA
DRLIN+35 ;on screen
7310 LDA FR0
5380
LDA GH
6350
LDY
HX0R5T ; input node
7320 CMP 8$80
5390
STA T+l
6360
LDA
INPMS,Y ;get letter
7330 BCS EDN
;no way.
5400
LDX 80
j data pos
6370
STA
DRLIN+25 ;on screen
7340 STA FBYTE
;save it
5410
AIM
LDY 830
;screen Y
6380
,
7350 JSR ERAINP
;clear INPLIN
5420
AIL
LDA MYBUF,X
;get byte
6390
;Put Hex 8 on Status Line
7360 LDA 8$A4
; a " D ■
5430
STX X2
6400
;enter with X = position
7370 STA INPLIN+3
5440
LDX AIFLAG
; ATASCII or
6410
■
7380 JSR G_HS
jget data
5450
BNE AIN
;Internal
6420
PHI
LDY
81 ; start at dig82
7390 BCS EDN
5460
JSR ASC2IC
; convert
6430
BNE
P_IN
7400 STY Yl
jsave length
5470
AIN
LDX X2
6440
PH2
LDY
82 ; digit 83
7410 DEY
5480
STA CT),Y
jshow it
6450
P_IN STY TMP1 ;save Y
7420 MIC LDA IBUF,Y
;»ake the data
5490
INX
6460
STX
TMP2 ;save X
7430 LDX AIFLAG
JASCICODE
5500
INY
6470
JSR
BIN2HEX ;nake hex
7440 BEQ MIO
5510
CPY 8$26
;end of line?
6480
LDY
TMP1 /restore X&Y
7450 JSR ASC2IC
5520
BNE AIL
6490
LDX
TMP2
7460 MIO STA IBUF.Y
5530
JSR ADD40
jnext line
6500
P_LP 1
7470 DEY
5540
CPX 8$80
;end of buffer?
6510
JSR
ASC2IC jwake ICODE
7480 BPL MIC
5550
BNE AIM
6520
ORA
8$80 ; inverse it
7490 EE2 LDY FBYTE
;y= pos
5560
RTS
6530
STA
STATUS, X jon screen
7500 LDX 80
5570
f
6540
INX
7510 CPM LDA IBUF,X
■get byte
5580
;5how it as ATASCII on screen
6550
INY
7520 EE3 STA MYBUF, Y
store it
5590
■
6560
CPY
84 j at end?
7530 INX
5600
A5C2IC JSR
6570
BNE
P_LP ;no.
7540 INY
5610
ORA A2I,X
6580
J MP
ZFR ;zap FRO
7550 CPY 8$80
end of sec?
5620
LDX XI
6590
f
7560 BEO. ERT
yes .
5630
RTS
6600
J Copy DSBUF to MYBUF
7570 CPX Yl
end of data?
5640
i
6610
,
7580 BNE CPM
no.
5650
;5how as Internal Code on screen
6620
TOMYBUF
LDY 8$7F
7590 ERT JMP 5H0WALL
show changes
5660
*
6630
TOM
LDA
DSBUF, Y
7600 ;
5670
IC2ASC JSR BITER
6640
STA
MYBUF, Y
7610 jDeciMal to Hex converter
5680
ORA I2A,X
6650
DEY
7620 ;
5690
LDX XI
6660
BPL
TOM
7630 DECH LDA 81
hex node
5700
RTS
6670
RTS
7640 STA IMODE
5710
;
6680
i
7650 LDY 85 ,
5 chars nax
5720
;Do
bit work
6690
; Tables
for ATASCII and
7660 JSR INPUT
5730
}
6700
{Internal code conversions
7670 BCC G_IB
5740
BITER STX XI
6710
•
7680 RTS
5750
PHA
6720
I2A
.BYTE S20, $40, $00, $60
7690 G_IB LDA 8 <IBUF
; point FP
5760
ROL A
6730
A2I
.BYTE $40, $O0, $28, $60
7700 STA INBUFF ,
to buffer
5770
ROL A
6740
;
7710 LDA 8 >IBUF
5780
ROL A
6750
;The Connand Table
7720 STA INBUFF+1
5790
ROL A
6760
,
7730 LDA 80
5800
AND 83
6770
COMTAB
WORD EDITS JblOCk edit
7740 STA CIX
5810
TAX
6780
.WORD HX2DEC Jhex>dec
7750 JSR AFP ,
ASCII to FP
5820
PLA
6790
■WORD DECH ;dec>hex
7760 JSR FPI ,
FP to Integer
5830
AND 8$9F
6800
■WORD BFILL ;blOCk fill
7770 BCC U5 ,
CLC->good .
5840
RTS
6810
.WORD EORS ;eor sector
7780 J5R ZFR ,
■0000' on error
5858
/
6820
.WORD CHNFIL ; file 8
7790 U5 LDA FRO+1
JULY A.N.A.L.O.B. Computing
7800
7810
7820
7830
7840
7850
7860
7870
7880
7890
7900
7910
7920
7930
7940
7950
7960
7970
7980
7990
8000
8010
8020
8030
8040
8050
8060
8070
8080
8090
8100
8110
8120
8130
8140
8150
8160
8170
8180
8190
8200
8210
8220
8230
8240
8250
8260
8270
8280
8290
8300
8310
8320
8330
8340
8350
8360
8370
8380
8390
8400
8410
8420
8430
8440
8450
8460
8470
8480
8490
8500
8510
8520
8530
8540
8550
8560
8570
8580
8590
8600
8610
8620
8630
8640
8650
8660
8670
8680
8690
8700
8710
8720
8730
8740
8750
8760
;save the tt
; force decinal
jposit 8
; insert =
;get St back
PHA
LDA FRO
PHn
LDX ttl
STX HXDC
DEX
J5R COPYMUM
INX
LDA tt' =
STA IBUF,X
INX
PLA
STA FRO
PLn
STn FRB+1
JSR COP-ALL ;copy hex
J MP SHO-IT
i
;Hex to Decinal Converter
HX2DEC JSR G-NUM ;get nunber
BCS ANRTS
i
ldx ttl ; force decinal
STX HXDC
dex ; insert hex
JSR cop_all
LDA tt' = ; insert ,, ="
STA IBUF+5
LDX »6 J posit 86
JSR COPYNUM jcopy nunber
sho_it LDA ibuf,x ;put the str
JSR A5C2IC ;on the
STn LINEQ.X ;screen.
DEX
BPL SHO-IT
ANRTS RT5
;Copy all 4 Hex digits to IBUF
COP-ALL STX TMP1
JSR BIN2HEX
LDX TMP1
LDA tt'5
STA IBUF,X
INX
JMP ALL
;B10Ck Fill
BFILL JSR G-NUM
BCC BFB
RT5
BFB LDA FRO
BFC LDY 8$7F ;fill nybuf
BFF STA MYBUF,Y ;with value
DEY
BPL BFF
BFD JMP SHOMALL ;ShOW it
i
;Convert Hex to Binary value
; returns with A = value
HEX2BIN LDA HXL ;check if
JSR CHEX
STX HXL
LDA HXH
JSR CHEX
TXA
ASL A
ASL A
ASL A
ASL A
ORA HXL
RTS
;sane for hi
;xl6
;add low
;=A
;5ee if digit is in the Hex
;table
CHEX LDX 8$0F ; 16 digits
HH4 CMP HXTABjX
BEG HH3
DEX
BPL HH4
HH3 RTS
i
;Sets flag for Hex or
;5tring (Character} Input
HEXSTR LDA HXORST
EOR 81
STA HXORST
JMP SECINF
i
;eor the data with a byte
EORS JSR G-NUM
8770
8780
8790
8800
8810
8820
8830
8840
8850
8860
8870
8880
8890
8900
8910
8920
8930
8940
8950
8960
8970
8980
8990
9000
9010
9020
9030
9040
9050
9060
9070
9080
9090
9100
9110
9120
9130
9140
9150
9160
9170
9180
9190
9200
9210
9220
9230
9240
9250
9260
9270
9280
9290
9300
9310
9320
9330
9340
9350
9360
9370
9380
9390
9400
9410
9420
9430
9440
9450
9460
9470
9480
9490
9500
9S10
9520
9530
9540
9550
9560
9570
9580
9590
9600
9610
9620
9630
9640
9650
9660
9670
9680
9690
9700
9710
9720
9730
BCC E-GO
RTS
E_G0 LDY 8$7F ;eor whole
ERP LDA MYBUF.Y JSeCtor
EOR FRO
STA MYBUF,Y
DEY
BPL ERP
JMP SHOMALL ; show it
t
jshow sector Data, Characters
jand Sector infornation
SHOMALL JSR SHH5EC ; data
JSR ASCINT characters
JMP SECINF jinofrnation
; Install the HELP screen
HELPME LDA tt <HELPDL ; change
STA OLDD .-display list
LDA tt >HELPDL ;part way
STA OLDD+1 jdown
PLA
PLA
JMP GETCOM
i
;Restore the Sector's Data
UNDO JSR TOMYBUF
JMP SHOMALL
;Erase text in Window
ERATXT LDY tt39
LDA ttO
ET1 STA LINE0,Y
DEY
BPL ET1
RTS
i
JChange Source Drive
CHNSRC LDX 5RCDRU
JSR DRV-UP
STX SRCDRU
JMP SECINF
i
;Change Destination Drive
CHNDES LDX DESDRU
JSR DRV-UP
STX DESDRU
JMP SECINF
;Increnent Drive Nunber
DRU-UP INX
CPX tt9
BNE SHX
LDX ttl
SHX RTS
i
JChange the File Nunber
CHNFIL JSR G-NUM
BCC FF1
FF3 RTS
FF1 LDA FRO+1
BNE FF3
LDA FRO
CMP tt64
BCC FF4
LDY 8181
JMP IOERR
FF4 ASL A
ASL A
STA FRO
;0-63 allowed
Jhigh 6 bits
;used for file
; nunber
LDA MYBUF+125 jget byte
AND 83 ;nask out low
ORA FRO jadd in File tt
STA MYBUF+125
JMP SHOMALL JShOW it
j
;Get Hex or String
G_HS LDA HXORST
BNE G_ST
JMP G-HEX
G_ST JMP G-STR
i
jSearch for Hex or String.
;String can be either
;ATASCII or Internal Code
5EARCH5 JSR G_HS ;get data
9740 BCC A02
9750 AOR RTS
9760 j
9770 A02 CPY ttO
9780 BEQ IS-OLD?
9790 STY SRFLG
9800 LDY 844
9810 AOCP LDA IBUF,Y ;to the save
9820 STA SRBUF.Y ;buffer for
9830 DEY
9840 BPL AOCP
9850 BMI AORI
9860 IS-OLD? LDA SRFLG ;old data?
9870 BEQ AOR
9880 ;
9890 AORI LDY ttO
9900 ALI LDA 5RBUF,Y ; internal
; just EOL?
;yup, check buf
;save length
;copy bufr over
jnext tine
;no way!
;convert to
LDX AIFLAG
BEQ A_ST
JSR ASC2IC
A_ST STA IBUF,Y
INY
CPY SRFLG
BNE ALI
9910
9920
9930
9940
9950
9960
9970
9980 S
9990 S5TR LDA 8$8i
010000 SEC
010010 5BC SRFLG
010020 STA MAXLEN
010030 LDY no
010040 5EL LDX ttO
010050 STY Yl
010060 TRYF LDA IBUF.X jget buffer
010070
010080
010090
010100
010110
010120
010130
010140
010150
010160 ;
010170 GS-UP LDY Yl
INY
CPY MAXLEN
BNE SEL
RTS
CMP MYBUF,Y
BNE GS-UP
INY
INX
CPX SRFLG
BNE TRYF
LDA Yl
STA FBYTE
JSR SHO-POS
conpute the
last posit we
can look at.
save it.
sec pntr
bufr pntr
save it
in sector?
no increnent.
get next char
at end?
no yet . . .
first byte
save
sho natch!
get posit
increnent
at end?
no loop,
so long
010180
010190
010200
010210
010220
010230 ;find place on screen to
010240 ;nark the natch
010250 ;
010260 SHO-POS LDA FBYTE ;byte tt
010270
010280
010290
010300
010310
010320
010330
010340
010350
010360
010370
010380
010390
010400
010410
010420
010430
010440
010450
010460
010470
010480
010490
010500
010510
010520
010530 ;
010540 ;Refresh the screen to
010550 ; erase the arrows
010560 ;
010570 REFRESH JSR CLRSCN
010580 JSR DOLEFT
010590 JMP SHOMALL
010600 ;
010610 jChange Screen Color
010620 ;
010630 KOLOR LDA C0L0R2
010640 CLC
010650 ADC 8$10
010660 STA C0L0R2
010670 RTS
010680 ;
010690 ; Change Luninance
010700 ;
LSR A
LSR A
LSR A
TAY
LDA GL,Y
STA T
LDA GH,Y
STA T+l
TYA
ASL A
ASL A
ASL A
STA TMP3
LDA FBYTE
SEC
SBC TMP3
STA TMP3
ASL A
CLC
ADC TMP3
CLC
ADC tt2
TAY
LDA ttl27
STA CT1,Y
RTS
;div by 8
;to get row
;get nenory
; posit ion
;x8
;get renainder
;go right by
; threes !
;x2
;x3
; f or Margin
; wedge
;show it
JULY A.N.A.L.O.O. Computing
§Wk
010710
LUMIN
LDA C0L0R2
011680
BCS T-NO
012650
LDA FRO jcopy new sec8
010720
TAX
011690
T_L0 LDA SECL
;test lo.
012660
STA SECL ;into pntr
010730
AND
8$F0
011700
CMP SDLO,X
012670
LDA FRO+1
010740
STA
CTMP
011710
BCC S_0K
012680
STA SECH
010750
TXA
011720
T_N0 LDA SDLO,
X ;nove Max 8
012690
WR2 LDA SECL ; use old sector
010760
CLC
011730
STA SECL
; into sec 8
012700
STA FRO ;nunber.
010770
ADC
82
011740
LDA 5DHI,X
012710
LDA SECH
010780
AND
8$0F
011750
STA SECH
012720
STA FRO+1
010790
ORA
CTMP
011760
S_OK LDA SECL
;save the
012730
JSR BIN2HEX ;nake hex
010300
STA
C0L0R2
011770
STA DAUX1
jsector in SIO
012740
LDY 83 ;copy to the
010810
RTS
011780
LDA SECH
;work area
012750
WR3 LDA LBUFF,Y ;nessage.
010820
I
011790
STA DAUX2
012760
STA SUREMS+il,Y
010830
jChange Sector Link
011800
LDA 8$80
;128 bytes
012770
DEY
010840
i
011810
STA DBYTLO
012780
BPL WR3
010850
5LINK5 J5R G_NUM
011820
LDA 80
012790
LDA DE5DRU ;put in the
010860
BCC
SL_G
011830
STA DBYTHI
012800
ORA 8$30 Jdestn drive
010870
RTS
011840
JMP DSKINU
j do SIO
012810
STA SUREMS+20
010880
SL_G LDA FRO ;chk for
011850
i
012820
LDY 80
010890
ORA
FRO + 1
011860
jFornat an I/O
Error 8
012830
WR4 LDA SUREMS,Y
010900
BED
LN_ER
011870
i
012840
BEQ GYN
010910
LDA
FRO + 1
011880
F_ERR JSR ZFR
;zap FRO
012850
JSR ASC2IC
010920
LDX
DENSITY ,'nake sure the
011890
STY FRO
jsave err 8
012860
STA CINPL0CJ,Y
010930
CMP
SDHI,X ;new link is
0119O0
LDX ttl
; force dec inal
012870
INY
010940
BCC
G_LNK j allowed in
011910
STX HXDC
012880
BNE HR4
010950
BEQ
G_TLO ;this density.
011920
LDX tt7
;copy error Hsg
012890
GYN JSR GETKEY
010960
BC5
LN_ER
011930
DS.l LDA ERMS,
X ;to buffer
012900
CMP 827
010970
G_TL0
LDA FRO
011940
STA IBUF,X
012910
BEQ MRU
010980
CMP
SDLO,X
011950
DEX
012920
AND tt$7F
010990
BCC
G_LNK
011960
BPL DS.l
012930
CMP 8'Y
011000
BEQ
G_LNK
011970
LDX 88
jcopy nunber in
012940
BEQ WR5
011010
BCS
LN_ER
011980
J5R COPYNUM
012950
CMP 8'M
011020
G_LNK
LDA fro jstore it
011990
LDA no
012960
BNE GYN
011030
STA
MYBUF+126
012000
STA IBUF+1,X
012970
BEQ MRU
011040
LDA
FRO + 1
012010
RTS
012980
;
011050
AND
tt3
012020
i
012990
MRS JSR WRITIT
011060
STA
FRO
012030
;Disk editor Error Routine
013000
BPL MRU
011070
LDA
MYBUF+125 jnask Off
012040
i
013010
JSR IOERR
011080
AND
8$FC ; file 8
012050
IOERR JSR F_ERR
013020
WRU JMP EOFT ;restore
011090
ORA
FRO+1 ;add in link
012060
JMP SHO_IT
;show error.
013030
;
011100
STA
MYBUF+125
012070
i
013040
jChange Density
011110
JMP
5H0WALL ;shOW it
012080
;Read Down One
Sector
013050
j
011120
j
012090
i
013060
CHNDEN5 LDA DENSITY
011130
LN_ER
LDY 8180
012100
D0HN1 LDA SECH
013070
EOR 81
011140
JMP
IOERR
012110
BNE DA2
; ok
013080
STA DENSITY
011150
j
012120
LDA SECL
013090
JMP SECINF
011160
; Read
a Sector
012130
CMP 82
;if LT 2 no
013100
I
011170
READS
BCC
JSR G_NUM ;get sector
G_RD
012140
012150
012160
BCS DA2
RTS
DA2 DEC SECL
; decrease
;go down 1
013110
013120
013130
BORDER .5BYTE "^■CEXZKEX23 > '
011180
.5BYTE "p J MJ^M^.Tn^M^MH"
011190
.SBYTE 'ifH'rtliM "
011200
RTS
G_RD LDA FRO ; just EOL?
012170
012180
LDA SECL
CMP 8$FF
013140
013150
*
011210
inms .SBYTE "H!lid:l!MI"
011220
ORA
FRO+1
012190
BNE DAI
013160
ATMS .SBYTE "[iM',>«f«"
011230
BEQ
DORED ;yes, reread
012200
DEC SECH
013170
INPMS .SBYTE "(IE"
011240
LDA
FRO jcopy the new
012210
DAI JMP DORED
;read it
013188
SDLO .BYTE $D0,$10
011250
STA
SECL ;8 to area
012220
i
013190
SDHI .BYTE $02, $04
011260
LDA
FRO + 1
012230
;Read Up One Sector
013200
ERMS .BYTE "Error 8 "
011270
STA
SECH
012240
i
013210
/
011280
•
012250
UPl INC SECL
013220
;Left Border
011290
DORED
BPL
JSR READIT ;do the read
G.Q
012260
012270
BNE UPA
INC SECH
013230
013240
i
011300
1 FFTB .SBYTF "WMiWHMMYW
011310
JSR
IOERR
012280
UPA JMP DORED
013250
. sbyte "(iH!r.iii*fcfciii5i*WsWi)"
011320
G.Q JSR TOMYBUF ; Hove to Hybuf
012290
i
013260
,
011330
JMP
SHOWALL ;shOW it
012300
jTrace a file
013270
;Uarious Messages 8 Pronpts
011340
■
012310
i
013280
;
011350
;Set up
012320
TRACE5 LDA SECL J save cur
013290
SUREMS .BYTE "Write SEC; 0000"
011360
012330
STA SSECL
; nunber just
013300
.BYTE " to D : Y/N?",B
011370
READIT LDA SRCDRU ;sour*ce drv
012340
LDA SECH
;in case
013310
HXTAB .BYTE "0123456789ABCDEF"
011380
STA
DUNIT
012350
STA SSECH
013320
HTHT .SBYTE "I*[?:»:IJ«>1ITI"
011390
LDA
8 >DSBUF jread into
012360
LDA MYBUF+125 ; get link
013338
.SBYTE "MttH^TTSitttii"
011400
STA
DBUFHI Jdsbuf
012370
AND 83
;hi
01334G
.SBYTE "H«aWilfl:l*ri"
011410
LDA
n <DSBUF
012380
STA SECH
013350
.SBYTE "HIZH^H"
011420
STA
DBUFLO
012390
LDA MYBUF+126 ;and low
011430
011440
LDA
BNE
8$52
REDMRT
012400
012410
STA SECL
ORA SECH
LISTING 4: ASSEMBLY
011450
■
012420
BNE D_R
; i f end of
011460
;Set up Nrite
012430
LDY 8182
0100
0110
SAUE8D1DMPT3.M65
011470
' t
012440
JMP IOERR
011480
WRITIT LDA DE5DRU Jdest. drv
012450
D_R JMP DORED
; trace
0120
011490
STA
DUNIT
012460
J
0130
Met'iory disassembler
011500
LDA
tt >MYBUF jwrite out
012470
EOFT LDA SSECL
jreset current
0140
011510
STA
DBUFHI ;nybuf
012480
STA SECL
;sector nunber
0150
by: Bryan Schappel
011520
LDA
tt <MYBUF
012490
LDA SSECH
0160
0170
011530
STA
DBUFLO
012500
STA SECH
011540
LDA
«S57
012510
RTS
0180
011550
.
012520
j
0190 1
>isamem LDY 80 ;zero Y
011560
jgeneral read, write
012530
;Write a Sector
0200
STY HXDC Jin hex
011570
012540
j
0210
5TY BYTES
011580
REDMRT STA DCOMND ; save end
012550
WRITES JSR G_NUM ; sector to
0220
JSR GETBYT ; get opcode
011590
LDA
SECL ;sector 8?
012560
BCC WR1
; write.
0230
BPL D.l ;error?
011600
ORA
SECH
012570
RTS
0240
JMP D_OUER ;yes!
011610
BNE
C_D ;no.
012580
WR1 LDA SECL
;save old 8
0250
011620
INC
SECL :now sector 1.
012590
STA SSECL
; for later .
0260 [
>.l STA OP ;save op
011630
C_D LDX DENSITY ) test to be
012600
LDA SECH
0270
LDY 80 jzero Y
011640
LDA
SECH ;sure that the
012610
STA SSECH
0280 1
■NDOP CMP OPCODE, Y ;is op in
011650
CMP
SDHI,x jsector is on
012620
LDA FRO
jsector 0?
0290
BEQ HAUOP ;the opcode
011660
BCC
S_OK ;the disk.
012630
ORA FRO+1
0300
INY ;table?
011670
BEQ
T_L0
012640
BEQ WR2
; yes.
0310
CPY 8151 ;151 yet?
JULY A.N.A.L.O.Q. Computing
41
■Jmi
0320
BNE
FNDOP
;no.
1290
LDX 8$20
jslan IOCB 82
2260
LDA CINDR),Y
jget label nane
0330
1300
JSR CLOSE
2270
STA IBUF,X j
froM the table
0340
HAVOP 5TY Y2
jsave Y
1310
PRINT ALL.
DONE ;done Mess,
2280
BPL C-CP ,
and insert into
0350
JSR
ZBUF
;clear buffer
1320
JSR GET-RET
;get a return
2290
AND 8S7F ,
disa line.
0360
LDO
fiDDR
;copy addr
1330
JMP INTRO
;goto intro,
2300
STA IBUF,X
0370
STA
FRO
jto FP
1340 ,
2310
LDA ADD-ON
exact natch?
0380
LDA
fiDDR+1
1350 ,
Innediate Mode
2320
BNE PLUS J
no .
0390
STA
FRQ + 1
1360 ,
2330
RTS
so long.
0400
LDX
tt23
;pos. 23
1370 IMMED JSR LOBYTE
; insert L5B
2340
i
0410
J5R
COPYNUM
jcopy it
1380
LDA 8'8
;a 'W
2350
PLUS LDA 8'+
put in a ■+■
0420
JSR
ZFR
jclear FP
1390
STA IBUF+5
jin buffer
2360
STA IBUF+1, X
0430
LDfi
OP
jget op
1400
JSR ZFR
jzap FRO
2370
INX
0440
STfi
FRO
; in FP
1410
LDA DTEMP
;get byte
2380
INX
0450
LDX
»28
;pos 28
1420
STfi FRO
jinto FRO
2390
JSR ZFR
zap FRO
0460
JSR
COPYNUM
jcopy it
1430
LDX 86
;and add to the
2400
LDfi ftDD_ON
nake offset to
0470
LDfi
»';
1440
JMP COPYNUM
; output.
2410
STfi FRO
a decinal 8
0480
STfi
IBUF+22
1450
2420
INC HXDC
0490
LDY
Y2
jget Y
1460 NUMBR LDfi 80
J zero MSB
2430
JSR COPYNUM
[insert nunber
0500
CPY
U151
jlegal instr?
1470
STA DTEMP+1
2440
DEC HXDC
; force hex
0510
BNE
N151
;yes.
1480 NUMBR2 LDfi DTEMP
;put in FRO
2450
RTS
; and leave.
0520
i
1490
STA FRO
2460
j
0530
LDY
87
jcopy 8 chars
1500
LDfi DTEMP+1
2470
GO-UP LDA INDR
jget the label
0540
CP.B LDC
POINTB
Y ;get char
1510
STfi FRO+1
2480
CLC
ipointer and
0550
STfi
IBUF,Y
;put in buffer
1520 NUMBR3 LDX 86
;8 in pos. 6
2490
ADC TMP1
jadd on the len
0560
DEY
jdecrease index
1530
LDfi 8 <LAB
;point to the
2500
STA INDR
of the label so
0570
BPL
CP.B
; and loop
1540
STA INDR
jlabel table
2510
LDA INDR+1
! we can search
0580
JSR
ZFR
;zap FRO
1550
LDA 8 >LAB
2520
ADC 80
; nore .
0590
LDY
OP
;get the byte
1560
STA INDR+1
2530
STA INDR+1
0600
STY
FRO
;put in FRO
1570
LDA LABELS?
jwant labels?
2540
JMP LAB-SRCH
jloop!
0610
JSR
BIN2HEX
jnake it hex
1580
BNE GO-OUT
jnope.
2550
!
0620
LDfi
81
; force 1 byte
1590
2560
jZero page
0630
STfi
NBYTE
1600
This is the Location Label
2570
•
0640
LDX
»8
;posit 8
1610
search algorithn. The label
2580
ZPAG JSR LOBYTE
j do LSB
0650
JSR
SOME
;copy nuMber
1620
data are stored
as follows:
2590
JMP NUMBR
jadd arg
0660
J MP
fiEOLl
;and add EOL.
1630
2600
1
0670
1
1640
hi nybble-byte
1 loc length
2610
jZero page,X
0680
N151 LDX OFFSET
,Y ;MNE offset
1650
lo nybble-byte
1 label length
2620
j
0690
LDY
no
;copy out the
1660
location hi, location lo, and
2630
ZPAGX JSR LOBYTE
JLSB
0700
fiDMNE LDfi MNE,X
jMnenonic and
1670
the label nane.
2640
JSR NUMBR
jadd arg
0710
STfi
IBUF+1,
1 ;put in
1680
2650
ADDX2 LDY 81
J just ,X
0720
INX
; buffer.
1690 1
.fiB_SRCH LDY 80
;zero index
2660
fiDDX INX
jup X
0730
INY
1700
LDO CINDR3,Y
jget a byte.
2670
fiDDX3 LDfi COMMOX
,Y jcopy the
0740
CPY
83
;3 chars?
1710
BNE N_FF
j<>0 then cont.
2680
STfi IBUF+1, X
J ,X into
0750
BNE
fiDMNE
; no.
1720 GO_OUT JMP COPYNUM ; just nuMber
2690
DEX
jthe buffer
0760
STfi
NBYTE
1730
2700
DEY
0770
LDY
Y2
;restore Y
1740 1
l-FF PHA
jsave byte
2710
BPL fiDDX3
0780
LDfi
ITYPE,Y
;get Itype
1750
OND 8$0F
;get label len
2720
RTS
j done .
0790
TOY
{transfer to Y
1760
STfi TMP1
jsave it.
2730
I
0800
LDO
NBTfiB,Y
;get 8 bytes for
1770
PLA
;get byte back
2740
; Absolute
0810
STfi
NBYTE
jthis instr.
1780
LSR A
;shift it down
2750
j
0820
TYfi
;restore Ace.
1790
LSR
2760
ABSOL JSR LOBYTE
JLSB
0830
fiSL
fi
;tines 2
1800
LSR A
2770
JSR HIBYTE
J MSB
0840
TfiY
;in Y
1810
LSR A
2780
JMP NUMBR2
jadd arg
0850
LDO
DCOMT,Y
;look up the
1820
STA ADD-ON
jsave it
2790
t
0860
STfi
DJSR+1
;routine addr
1830
INC ADD-ON
jadd one.
2800
jfibsolute ,X
0870
LDO
DCOMT+1
Y jan put in
1840
INY
jnove up 2
2810
j
0880
STO
DJSR+2
; JSR
1850
INY
jbytes.
2820
ftB50LX JSR fiBSOL
jset up absol
0890
LDX
NBYTE
;get 8 bytes
1860
LDA CINDR3,Y
jget addr lo
2830
JMP ADDX2
jcopy in ,X
0900
DEX
jsub 1.
1870
STA LOC-S
jsave it.
2840
1
0910
BEQ
DJSR
jif 0, skip!
1880
CLC
jadd on location
2850
jfibsolute ,Y
0920
JSR
GETBYT
jget next one
1890
ADC ADD-ON
j length & save .
2860
I
0930
BMI
D-OVER
joops, error.
1900
STA LOC-E
2870
AB50LY JSR ABSOL
jdo absol
0940
STfi
DTEMP
jsave byte
1910
DEY
Jdown index
2880
ACY LDA 8S2C
j a conna
0950
LDX
NBYTE
;get count again
1920
LDA CINDR3,Y
jget addr hi
2890
STA IBUF+1,X
jin buf
0960
DEX
JSUb 2.
1930
STA LOC-5+1
jsave
2900
LDA 8"Y
ja Y
0970
DEX
1940
ADC 80
jadd carry
2910
STA IBUF+2, X
Jin buf
0980
BEQ
DJSR
;if 0, skip
1950
STA LOC-E+1
j and store.
2920
RTS
j done
0990
JSR
GETBYT
jget 3rd byte
1960
2930
I
1000
BMI
D-OVER
;oops, error.
1970
LDA DTEMP+1
jinstr hi
2940
;lndirect X
1010
STfi
DTEMP+1
jsave this byte
1980
CMP LOC-S+1
jequal to lochi?
2950
t
1020
j
1990
BNE N.TST
jno .
2960
INDX LDA 80
J no MSB
1030
DJSR JSR SFFFF
jgo connand!
2000
LDA DTEMP
jtest lo
2970
STA DTEMP+1
1040
AE0L1 LDY «39
;now insert
2010
CMP LOC-S
2980
JSR LOBYTE
Jdo LSB
1050
ftE0L3 LDfi IBUF,
Y ;the EOL
2020
BEQ D-CP
jexact natch!
2990
JSR OPENP
j add open ' £ ■
1060
CMP
»32
; character
2030
3000
INX
jup X
1070
BNE
fiE0L2
2040 N.T5T LDfi DTEMP+1 ;now we see if
3010
LDY 82
j3 bytes
1080
DEY
2050
CMP LOC-E+1
jthe instr addr
3020
BNE ADDX
jcopy ■ ,X3 ■
1090
BPL
OE0L3
2060
BEQ T5T.L
;is in the range
3030
1
1100
fiE0L2 LDO ttEOL
2070
BCS GO-UP
jof the location
3040
JIndirect Y
1110
STfi
IBUF+1,
Y
2080
rST.L LDA DTEMP
3050
I
1120
LDfi
no
2090
CMP LOC-E
3060
INDY LDA 80
j no MSB
1130
STfi
IBUF+2,
Y
2100
BCS GO-UP
3070
STA DTEMP+1
1140
LDfi
fiDDR
;now add the
2110
1
3080
JSR LOBYTE
Jdo LSB
1150
CLC
jnunber of
2120
LDA DTEMP+1
jtest hi
3090
JSR OPENP
j left C
1160
fiDC
MBYTE
;byte to the
2130
CMP LOC-S+1
3100
LDY 82
jcopy in the
1170
STfi
fiDDR
jadr pointer
2140
BCC GO_OUT
jnot in range
3110
ADDY LDA COMMflY,
Y j 'J.Y-
1180
BCC
AE1
;to get next
2150
LDA DTEMP
jtest lo
3120
STfi IBUF+1, X
1190
INC
ODDR+1
; instr addr.
2160
CMP LOC-S
3130
INX
1200
fiEl RT5
;bye.
2170
BCC GO-OUT
jnot in range
3140
DEY
1210
l
2180
>_CP SEC
jeale actual
3150
BPL ftDDY
1220
;DisasseMbly Over
2190
SBC LOC-S
joffset for the
3160
RTS
(done
1230
;
2200
STA ADD-ON
j +x add on.
3170
,
1240
D-OVER
JSR fiNY_
LEFT jsend extra.
2210
3180
jficcunulator Mode
1250
INC
SFLfiG
;set swap flag
2220
DEX
jposit S
3190
j
1260
JSR
SEND-OUT jwrite buffer
2230
LDY 82
jstart at pos 2
3200
fiCCUM LDA 8'A
■an 'A'
1270
LDX
B$10
jslan IOCB ttl
2240
:_cp INY
JUP Y
3210
STA IBUF+5
in buffer
1280
JSR
CLOSE
2250
INX
jup X
3220
RTS
; done
JULY A.N.A.L.O.Q. Computing
0k
3230
i
4200
STA
IBUF,X
5170
LDA 83
;open connand
3248
;Bnanch instructions
4210
BPL
CNLOOP
5180
STA ICC0M,X
3250
/
4220
AND
8$7F
jnask bit 7
5190
LDA 8 <SRCFILE :point to the
3260
RELA J5R LOBVTE
;put LSB
4230
STA
IBUF.X
5200
STA ICBAL,X
isource file-
3270
INC MBYTE
JMake 3 byte
4240
RTS
; leave
5210
LDA 8 >SRCFILE inane.
3280
J5R ZFR
jzero FRO
4250
f
5220
STA ICBAH,X
3290
LDA DTEMP
;get operand
4260
INHEX JSR BIN2HEX j nake hex
5230
LDA 84
;read only.
3300
BPL NOBACK
;not inverse
4270
LDX
CNTLO
;get pos
5240
STA AUK1,X
3310
AND 8$7F
;nask inverse
4280
INX
;up it.
S2S0
LDA 80
3320
EOR 8$7F
jflip it
4290
CPX
823
5260
STA AUK2,X
3330
CLC
;add a 1
4300
BEQ
ALL
J if 25 do all
5270
STA BYTCNT
jzero byte cnt
3340
ADC Kl
4310
CPX
821
;is X => 30?
5280
STA BYTCNT+J
3350
STA DINS+1
jsave it
4320
BCC
ARG
;yes.
5290
JSR CIOV
jopen it!
3360
JMP TOFP
j done
4330
SOME LDA LBUFF+2 ;no. just copy
5300
BMI INERR
; oops .
3370
NOBACK STA DINS+1
4340
STA
IBUF,X
;the LSB part
5310
JSR GET. TWO
;get file header
3380
TOFP LDA DTEMP
; operand
4350
INX
;of the Hex
5320
BMI INERR
jenpty file!
3390
BPL FORWARD
;bran forward
4360
LDA
LBUFF+3
; nunber.
5330
JSR CHKFF
; is it binary?
3400
LDA ADDR
jnow subtract
4370
STA
IBUF,X
5340
BNE CIO.B
; no !
3410
SEC
; f roM addr
4380
RTS
;bye.
5350
LDY 81
jsignal good
3420
SBC DINS+1
;to find out
4390
ARG LDA
tt'$
; install a '$■
5360
RTS
3430
STA FRO
jwhere this
4400
STA
IBUF.X
5370
CIO.B LDY 8152
;not binary file
3440
LDA ADDR+1
jbranch goes.
4410
INX
;up X
5380
;
3450
SBC «0
4420
LDA
NBYTE
;Get 8 of bytes
5390
; Input error
3460
STA FRO+1
4430
CMP
82
;is it 2?
5400
■
3470
JMP BACK
;done.
4440
BEQ
SOME
;no.
5410
INERR CPY 8136
J EOF?
3480
FORWARD CLC
;add 8 to
4450
ALL LDY
88
;no. copy it
5420
BNE PI
;no, show error
3490
ADC ADDR
; addr to calc
4460
ALOOP LDA LBUFF,
Y ;all to buf
5430
LDA 80
jkill instr
3500
STA FRO
; forward branch
4478
STA
IBUF,X
5440
STA BYTES
3510
LDA ADDR+1
4488
INX
5450
JMP D_0VER
;and exit.
3520
ADC no
4490
INY
5460
PI JSR F-ERR
3530
STA FRO+1
4500
CPY
84
jdone yet?
5470
PRINT IN_P
jprint INPUT
3540
BACK LDA 82
;now add a Z
4510
BNE
ALOOP
; nope.
5480
PRINT IBUF
3550
CLC
;to skip the
4528
DEX
jdec X
5490
PRINT ALL.
DONE+10
3560
ADC FRO
; instruction
4530
RTS
;so long.
5508
JSR GET_RET
3570
STA DTEMP
; address
4540
i
5518
JMP D_OVER
3580
STA FR8
4558
; Binary
to hexadecinal
5520
i
3590
LDA FR8+1
4568
i
5530
;0pen Output file
3600
ADC no
4578
BIN2HEX
LDY 80
;buf indx=8
5540
;
3610
STA DTEMP+1
4588
LDX
81
;do 2 nuns
5550
OPENOUT LDX 8S20
jclose 82
3620
STA FRB+1
4590
NXTBYT STX XI
jsave it
5560
JSR CLOSE
3630
JSR NUMBR3
;add nunber
4608
LDA
8240
jget HI bits
5570
LDX 8$28
3640
DEC NBVTE
jMake 2 bytes
4610
AND
FR0,X
5580
LDA 83
jopen connand
3650
1
4620
L5R
A
Jdivide by 16
5590
STA ICCOM,X
3660
;lMplied Mode
4638
LSR
A
5600
LDA 8 <DSTFILE ;point to
3670
;
4640
LSR
A
5610
STA ICBAL,X
;the dest'n
3680
IMP RTS
jdo nothing
4650
LSR
A
5620
LDA 8 >DSTFILE jfilenane.
3690
•
4660
TAX
;to index
5638
STA ICBAH.X
3700
j Indirect instructions
4670
LDA
HXTAB,X
;get char
5646
LDA 88
jwrite only
3710
/
4680
STA
LBUFF, Y
;and save
5650
STA AUX1,X
3720
INDI JSR LOBVTE
jcopy in LSB
4698
INY
;up buf index
5660
LDA 80
;no lines.
3730
JSR HIBYTE
;and MSB
4708
LDX
XI
;get X back
5670
STA LINES
3740
JSR OPENP
;do open C
4718
LDA
815
;now LO bits
5680
STA AUX2,X
3750
LDA 8")
; and add
4728
AND
FRO,X
5690
LDA 8 <BIGBUF ;point to the
3760
STA IBUF+1,>
jclosing one
4738
TAX
5700
STA BUFPNT
;start of the
3770
RTS
j leave .
4748
LDA
HXTAB,X
;get char and
5710
LDA 8 >BIGBUF Jbuffer.
3780
I
4758
STA
LBUFF, Y
;put in buffer
5720
STA BUFPNT+1
3790
;Zero page ,Y
4768
INY
;up buf indx
5730
LDA DSTFILE
; is destn to
3800
i
4770
LDX
XI
;get X
5740
CMP 8'E
;the screen?
3810
ZPAGY JSR LOBYTE ; do LSB
4780
DEX
,'down by one
5750
BNE C.CIO
;no, call cio
3820
JSR NUMBR
; add arg
4790
BPL
NXTBYT
; done?
5760
LDY 81
;show good.
3830
JMP ACY
;copy ,Y
4800
RTS
;yes. bye.
5770
RTS
3840
I
4810
t
5780
C.CIO JMP CIOU
,'open it!
3850
jlnsert LSB
4820
;Fill buffer with blanks
5790
I
3860
;
4830
;
5800
;Close IOCB
3878
LOBYTE JSR ZFR
jzero FRO
4840
ZBUF LDA 832
;space
5810
J
3880
LDA DTEMP
;do lobyte
4850
LDX
839
;do 40 spaces
5820
CLOSE LDA 812
jclose connand
3898
5TA FR8
4860
ZLOOP STA IBUF,X
{in buf
5830
STA ICCOM.X
3900
LDX 831
;at pos. 18
4870
DEX
;down count
5840
JMP CIOU
;slan!
3910
JMP COPYNUM
;do it!
48S0
BPL
ZLOOP
;go again
5850
i
3920
i
4890
RTS
Jbye.
5860
;CIO get byte routine
3930
;Insert MSB
4900
i
5870
/
3940
I
4910
jZero FRO
5880
CIOGET LDX 8$10
;on ch 81
3950
HIBYTE JSR ZFR
;no FRB
4920
i
5890
LDA 87
;get bytes
3960
LDA DTEMP+1
jhibyte
4930
ZFR LDA
80
5900
STA ICCOM,X
3970
STA FR8
;in FP
4940
STA
FR8
5910
LDA 80
;no length says
3980
LDX 834
;at pos. 14
4950
STA
FR8 + 1
5920
STA ICBLL,X
;put byte in the
3998
JMP COPYNUM
jcopy it.
4960
RTS
5930
STA ICBLH,X
; accunulator .
4000
I
4970
1
5940
JMP CIDV
;get it!
4818
;rtdd Open C
4980
jopen Input File
5950
i
4828
j
4990
;
5960
;Get byte routine
4838
OPENP LDA 8' (
jopen C
5000
OPENIN LDX 8$10
;slan IOCB 81
5970
i
4040
STA IBUF+5
j in buffer
5010
JSR
CLOSE
5980
GETBYT LDA TYPE
;get type.
4050
JMP NUMBR2
;add nunber
5020
LDA
TYPE
;get disa type
5990
BEQ G-FILE
; i f o, fron file
4068
i
5030
BEQ
0_FILE
;if 0, then file
6000
LDX GETPTR
;get index
4070
;Copy nunber to
string
5040
JSR
UP, READ
;read 1st sector
6010
CPX SECBYTES
jat end?
4080
•
5050
PHP
;save status
6020
BEQ NX. SEC
1 yes .
4090
COPYNUM DEN
5060
LDA
8$88
jdefault size
6030
LDA DSBUF,X
;get byte.
4100
STH CNTLO
jsave x
5070
STA
SECBYTES
6040
INC GETPTR
;bunp pointer.
4110
LDA HXDC
jhex/dec?
5080
LDA
S.5IZE
;get actual
6050
LDY 81
jsignal good.
4120
BEQ INHEX
;have Hex.
5090
CMP
ttSea
;is 128 bytes?
6060
RTS
; bye .
4130
JSR IFP
;to FP
5100
BEQ
o.so
;yes.
6070
1
4140
JSR FASC
;to ASC
5110
LDA
DSBUF+127 ;get data byte
6080
NX. SEC LDA 81
; start on byte 1
4150
LDX CNTLO
;get index
5120
STA
SECBYTES
; count .
6090
STA GETPTR
4160
LDY 8$FF
;and copy
5130
0.S0 PLP
;pull status
6100
LDA 5. SIZE
jtrace links?
4170
CNLOOP INY
;the nunber
5140
BMI
INERR
;oops, error.
6110
CMP 8125
4180
INX
5150
RTS
;so long.
4190
LDA CINBUFFJ
,Y
5160
0-FILE LDX 8S10
J IOCB 81
cont
Inued on page 63
JULY A.IM.A.L.O.C3. Computing
43
(25
r=jD
(29
E)
(H) S)
C^Z 1 01 — i
continued from page 9
The trouble is that most character set edi-
tors are great for editing sets but not for look-
ing at them and comparing them. At most,
you can usually only look at one or two sets
at a time and by the time you load in the new
set, you have forgotten just what the last one
looked like.
The Character Set Display Utility (CSDU)
allows you to compare up to seven different
character sets on the screen at one time. And
it's easy to go back and reselect more fonts.
By using this utility, you will be able to clean
up your font disks quickly— and easily select
which font suits your needs for a particular
program.
Typing It In
CSDU is written in Action! . To use the pro-
gram, carefully type in Listing 1 using the
MIL Editor, found elsewhere in this issue.
Listings 2 and 3 are the Action! source
code for CSDU. If you have Action!, you may
type these listings instead, using D.CHECK
W ' ; ': ,' ',,: i :$$$&-; qimkfy-
tffe 2 'ffi&MMfrttV. SOW' '&
in Action! (ANALOG, December '88) to
check your work. To create a copy of CSDU
from the Action! listings, load Listing 3 into
the Action! editor and compile it, making
sure that Listing 2 (you should name it
CSET2.ACT) is on the disk in your drive.
Using the Program
At the title screen, insert your font disk into
the drive and press Start. The fonts must be
the standard 1,024-byte, nine-sector redefined
character set fonts, and the extender must be
.FNT, as in D: FILENAME. FNT.
Next, you will be presented with the font-
selection screen. Here you may use either the
joystick or the console keys to select fonts.
The font-selection screen will display up to
80 font names. Pressing Select or Option, or
moving the joystick, changes the highlight-
ed filename. Pressing Start or the joystick
button will toggle a marker next to the font.
You may select up to seven fonts. You will
not be allowed to mark more than seven or
mark an empty space.
When you have marked from one to seven
font names, pressing the space bar will take
you to the font display screen. If you press
Return or press the space bar without select-
ing any font names, you will be prompted to
insert a new font disk.
When the font display screen is displayed,
you will see seven multicolored windows.
Each font selected will have a window con-
taining the font name and the full set of al-
phanumeric characters— that is, the upper and
lower case letters and the number characters.
Pressing the space bar will allow you to select
more fonts to view. If you wish to view fonts
on a new disk, insert the disk before press-
ing the space bar. Pressing Start or the joy-
^ B *?-~v —'V/''' >l ' ; V-'- '■"*'' ' UT ' ''' '* >'!'' r j-v'- r '
hty, you will ,
stick trigger will end the program.
There are a couple cases where you might
see something funny on the screen. If you at-
tempt to load in a nonstandard Atari charac-
ter set font (for instance, a Daisy Dot font
file), the display window for that font will
contain garbage.
Using Action! as a Macro
Assembler
In a review of mine published in ANALOG
#66, the biographical blurb at the end of the
article mentioned my hunt for gainful em-
ployment. Since that time, I am happy to
report, I've found employment as a C
JULY A.IM.A.L.O.Q. Computing
programmer. Programming in C on a daily
basis has had two effects on me. The first of
these was a renewed respect and enthusiasm
for the Action! programming language on the
Atari.
Second, now as a "professional" (yeah,
right) programmer, I decided to learn every-
thing there was to know about programming
my Atari. I dug out every Boot Camp arti-
cle, starting from the first one in ANALOG
#13. Soon I had worked my way up to Karl
Wieger's excellent series of articles on mac-
ro assemblers and was ready to put my
MAC/65 cartridge to work.
By that time, however, my work with C led
me to realize one great advantage of the Ac-
tion! language. Like C, Action! is both a high-
level language and a low-level language at the
same time.
It is a high-level language when I want to
take advantage of built-in Print or Locate rou-
tines or use flexible IF-THEN-ELSE, DO-
WHILE, REPEAT-UNTIL constructs. It is
a low-level language when I want to directly
used for addresses. The nice thing about this
is that Action! automatically takes care of
storing and reading these numbers in low-
byte, high-byte format for us. No bothering
with LDA #START&255, LDA #START/256,
etc.
The global arrays are used as storage areas
for filenames, the custom display list, the
character set pointers, and the screen color
pointers. While Action! allows you to store
variables wherever you like, you have to take
some steps to make sure your variable area
doesn't overwrite a variable area used by the
language itself. By setting up a 512-byte ar-
ray called DLSPACE, we can put our display
list, DL, in there and be assured it does not
cross a page boundary.
Similarly, we have to step back MEMTOP
far enough to hold the seven character sets
and the screen memory.
On the other hand, all the routines that read
the joystick and the keyboard, select the files,
read the filenames off the screen, and invert
the selected filenames are not any that I would
manipulate hardware addresses, set or flip in-
dividual bytes, or set up custom screens or
interrupts. This gives a programmer a lot of
power to do fancy things very easily without
wading through tons of assembly code.
For instance, the beginning of the Action!
listing looks a lot like the equates at the be-
ginning of an assembly program. Most of this
I lifted right out of the Boot Camp series. The
DEFINEs are used for the actual seven bytes
of machine language used. About the only
thing Action! can't do is manipulate the Atari
status registers like the X, Y registers and the
accumulator.
The global BYTE variables are used for
one-byte memory locations and hardware
registers. The global CARD variables are
want to implement in assembly language,
macros or not. Action! is more than fast
enough to handle any of these routines. In
fact, I had to slow things down for the font
selection screen to keep pace with human
reflexes.
If you want the power of machine language
without having to reinvent the wheel, give
Action! a try.
A programmer for Bell Communications
Research, Dave still finds enough time to use
his 8-bit Atari. He enjoys programming in Ac-
tion! and MAC/65, and is interested in com-
puter simulations of all types.
JULY A.IM.A.L.O.B. Computing
LISTING 1: M/L EDITOR DATA
1000 DATA 255,255,254,52,49,72,93,226,
84,158,0,167,4,0,226,84,5097
1010 DATA 161,8,167,4,21,80,0,0,56,0,8
0,114,105,110,116,73,838
102O DATA 69,61,42,40,73,78,84,32,105,
41,226,84,133,0,167,4,2321
103O DATA 25,91,36,50,48,32,95,83,72,7
8,84,82,32,36,52,67,9334
1040 DATA 32,80,114,105,110,116,73,68,
69,93,226,84,101,0,0,0,653
1050 DATA 20,0,84,94,0,69,79,76,32,36,
52,67,32,95,68,79,9327
1060 DATA 80,82,50,72,0,2,90,53,7,0,53
,0,226,124,76,140,1508
1070 DATA 108,44,92,156,101,53,112,112
,112,66,0,0,2,130,14,2,8425
1080 DATA 2,130,14,2,2,130,14,2,2,130,
14,2,2,130,14,2,5880
1890 DATA 2,130,14,2,2,130,14,2,14,2,6
5,0,0,110,53,133,7630
1100 DATA 160,134,161,132,162,24,104,1
33, 132, 105, 3, 168, 104, 133, 133, 105, 6461
1110 DATA 0,72,152,72,160,1,177,132,13
3,130,200,177,132,133,131,200,663
1120 DATA 177,132,168,185,160,0,145,13
0,136,16,248,96,133,192,134,193,439
1130 DATA 56,169,0,229,192,72,169,0,22
9,193,170,104,96,134,194,224,1742
1140 DATA 0,16,3,32,196,53,133,130,134
, 131, 165, 133, 69, 194 , 133, 194, 9217
1150 DATA 166,133,16,9,165,132,32,196,
53,133,132,134,133,96,165,134,7634
1160 DftTA 166,135,164,194,16,3,76,196,
53,96,32,213,53,169,0,133,4590
1170 DATA 134,133,135,165,130,208,4,16
5,131,248,34,165,132,208,4,165,9142
1180 DATA 133,240,26,70,133,102,132,14
4,13,24,165,134,101,130,133,134,6556
1190 DATA 165,135,101,131,133,135,6,13
0,38,131,56,176,214,76,246,53,7773
1200 DftTA 164,132,240,10,134,134,70,13
4,106,136,208,250,166,134,96,164,1124
1210 DATA 132,240,10,134,134,10,38,134
,136,208,258,166,134,96,169,112,9915
1220 DATA 170,169,12,157,66,3,32,86,22
8,138,56,233,16,208,241,108,8959
1230 DATA 10,0,86,54,0,32,86,228,16,26
,192,136,240,6,104,104,4908
1240 DATA 152,108,106,54,72,138,72,74,
74,74,74,170,169,1,157,192,6324
1250 DATA 5,104,170,104,96,201,8,144,7
,104,104,169,134,108,106,54,5266
1260 DftTA 10,10,10,10,170,96,24,105,1,
157,68,3,152,105,0,157,2115
1270 DATA 69,3,96,72,138,168,104,170,1
73,108,54,96,72,169,0,133,5520
1280 DATA 165,104,96,72,169,1,133,165,
104,96,134,163,132,164,32,141,7405
1290 DATA 54,169,8,157,73,3,168,177,16
3,240,26,157,72,3,24,165,5300
1300 DATA 163,105,1,157,68,3,165,164,1
05,0,157,69,3,169,11,157,3711
1310 DATA 66,3,32,109,54,165,165,240,1
8,169,0,157,72,3,157,73,4486
1320 DATA 3,169,11,157,66,3,169,155,32
,109,54,96,32,180,54,76,3179
1330 DATA 194,54,32,171,54,76,4,55,32,
187,54,76,194,54,32,171,3764
1340 DATA 54,76,16,55,134,160,32,141,5
4,169,0,157,72,3,157,73,3357
1350 DATA 3,169,11,157,66,3,165,160,32
,109,54,96,170,173,108,54,5375
1360 DATA 76,28,55,169,155,76,52,55,13
4,164,132,165,32,141,54,24,4230
1370 DATA 165,164,105,1,157,68,3,165,1
65,105,0,157,69,3,165,163,5157
1380 DATA 240,24,157,72,3,169,0,157,73
,3,169,5,157,66,3,32,840
1390 DATA 109,54,189,72,3,240,3,56,233
,1,160,0,145,164,165,166,7565
1400 DATA 240,7,165,164,166,165,76,64,
55,96,72,169,0,133,166,104,5960
1410 DATA 76,64,55,32,141,54,169,0,157
,72,3,157,73,3,169,7,1807
1420 DATA 157,66,3,32,109,54,133,160,9
6,134,161,32,141,54,165,161,6925
1430 DATA 32,158,54,165,163,157,74,3,1
65,164,157,75,3,169,3,157,5613
1440 DATA 66,3,32,109,54,138,74,74,74,
74,170,169,0,157,192,5,4714
1450 DATA 96,32,141,54,169,12,157,66,3
,32,109,54,96,72,162,96,3209
1460 DATA 169,12,157,66,3,32,86,228,18
4,157,75,3,73,16,9,12,9888
1470 DATA 157,74,3,169,83,133,160,169,
58,133,161,169,160,157,68,3,7142
1480 DATA 169,0,157,69,3,169,3,157,66,
3,32,109,54,96,133,85,2387
1490 DATA 134,86,132,84,96,32,6,56,169
,6,174,253,2,76,28,55,2611
15O0 DATA 32,6,56,169,6,76,139,55,133,
160,134,161,132,162,160,0,6874
1510 DATA 165,162,208,4,165,163,248,22
,165,164,145,160,200,208,2,230,2160
1520 DATA 161,198,162,165,162,201,255,
208,231,198,163,56,176,226,96,72,3256
1530 DATA 169,0,133,164,104,76,32,56,1
33,160,134,161,132,162,160,0,6989
1540 DATA 165,164,208,4,165,165,240,24
,177,162,145,160,200,208,4,230,2340
1550 DftTA 161,230,163,198,164,165,164,
201,255,208,229,198,165,56,176,224,644
1
1568 DATA 96,76,124,56,72,169,224,141,
9,212,104,64,96,50,70,76,4801
1570 DftTA 138,56,169,192,141,14,212,17
3,49,2,141,134,56,173,48,2,4274
1580 DATA 141,133,56,24,173,133,56,105
,14,133,174,173,134,56,105,0,4693
1590 DATA 133,175,24,160,0,177,174,105
,128,145,174,140,47,2,173,123,7303
1600 DATA 56,141,1,2,173,122,56,141,0,
2,169,34,141,47,2,96,1410
1610 DATA 76,203,56,169,2,32,213,55,32
,135,56,160,0,140,198,2,4205
1620 DATA 200,140,240,2,136,132,82,56,
173,229,2,233,0,133,174,173,9227
1630 DATA 230,2,233,4,133,175,165,174,
41,0,141,10,53,165,175,41,5161
1640 DATA 252,141,11,53,169,8,133,132,
173,11,53,170,173,10,53,32,3285
1650 DATA 56,54,141,244,2,173,11,53,14
1,230,2,173,10,53,141,229,7080
1660 DATA 2,169,226,133,163,169,2,133,
165,169,0,133,164,160,0,174,8044
1670 DftTA 11,53,173,10,53,32,80,56,169
,224,133,163,169,0,133,165,7823
1680 DATA 169,8,133,164,160,0,174,11,5
3,173,10,53,32,80,56,24,739
1690 DATA 173,10,53,105,8,133,160,173,
11,53,185,0,133,161,169,225,7706
1700 DATA 133,163,169,0,133,165,169,8,
JULY A.N.A.L.O.G. Computing
133,164,168,24,166,161,165,160,9900
1710 DATA 32,80,56,24,173,10,53,105,40
,133,160,173,11,53,105,0,2288
1720 DATA 133,161,169,225,133,163,169,
0,133,165,169,8,133,164,160,32,8147
1730 DATA 166,161,165,160,32,80,56,24,
173,10,53,105,24,133,160,173,5419
1740 DATA 11,53,105,0,133,161,169,225,
133,163,169,0,133,165,169,8,8174
1750 DATA 133,164,160,152,166,161,165,
160,32,80,56,24,173,10,53,105,4386
1760 DATA 32,133,160,173,11,53,105,0,1
33,161,169,225,133,163,169,0,8250
1770 DATA 133,165,169,8,133,164,160,16
8,166,161,165,160,32,80,56,169,8804
1780 DATA 3,133,84,169,5,133,85,76,236
,57,9,33,72,65,82,65,2308
1790 DATA 67,84,69,82,160,57,162,226,1
69,6,32,16,55,76,2,58,1506
1880 DATA 9,32,32,32,32,32,32,35,69,84
,160,57,162,248,169,6,5067
1810 DATA 32,16,55,76,29,58,14,32,32,3
2,32,32,32,32,37,73,7121
1820 DATA 83,80,76,65,89,160,58,162,14
,169,6,32,16,55,76,57,954
1830 DATA 58,15,32,32,32,32,32,32,32,3
2,36,84,73,76,73,84,9438
1840 DATA 89,160,58,162,41,169,6,32,16
,55,160,0,140,144,2,140,3148
1850 DATA 146,2,140,145,2,76,109,58,28
,32,32,32,32,32,32,32,7857
I860 DATA 32,32,32,32,98,121,32,68,97,
118,101,32,65,114,108,185,3453
1870 DATA 110,103,116,111,110,162,58,1
69,80,32,22,55,76,154,58,34,2758
1880 DATA 32,32,32,32,32,40,99,41,32,4
9,57,56,57,32,102,111,193
1890 DATA 114,32,65,78,65,76,79,71,32,
67, 111, 109, 112, 117, 116, 105, 4478
1900 DATA 110,103,162,58,169,119,32,22
,55,76,165,58,0,162,58,169,4581
1910 DATA 164,32,22,55,76,213,58,37,32
,32,73,110,115,101,114,116,3990
1920 DATA 32,68,105,115,107,32,119,105
,116,104,32,70,111,110,116,115,5102
1930 DATA 44,32,80,114,101,115,115,32,
211,212,193,210,212,162,58,169,2250
1940 DATA 175,32,10,55,173,31,208,73,6
,240,8,173,132,2,240,3,5530
1950 DATA 76,220,58,96,88,0,0,166,76,1
84,76,245,58,32,151,53,5407
I960 DATA 236,58,2,56,173,236,58,233,1
, 133, 174, 169, 0, 133, 133, 169, 8935
1970 DATA 8,133,132,165,174,162,0,32,2
,54,141,239,58,173,239,58,8064
1980 DATA 141,240,58,24,173,239,58,105
,7,141,47,59,173,47,59,205,6186
1990 DATA 240,58,176,4,76,94,59,0,172,
238,58,162,0,173,237,58,7662
2000 DATA 32,24,56,165,160,41,127,141,
241,58,173,241,58,73,32,208,9099
2010 DATA 3,76,85,59,173,241,58,174,24
0,58,157,14,53,238,237,58,9984
2020 DATA 238,240,58,76,36,59,96,86,38
,76,38,76,102,59,142,96,3360
2030 DATA 59,141,95,59,172,96,59,162,0
,173,95,59,32,24,56,165,3752
2040 DATA 160,141,97,59,173,97,59,73,3
2,240,3,76,211,59,24,173,5783
2050 DATA 95,59,105,1,133,160,169,0,13
3,161,172,96,59,166,161,165,9387
2060 DATA 168, 32, 24, 56, 165, 160, 141, 98,
59,173,98,59,73,160,208,3,6548
2070 DATA 76,208,59,238,254,52,169,7,2
05,254,52,176,3,76,203,59,8673
2080 DATA 169,20,141,253,2,172,96,59,1
62,0,173,95,59,32,13,56,2717
2090 DATA 76,208,59,169,7,141,254,52,7
6,246,59,173,97,59,73,20,5881
2100 DATA 240,3,76,246,59,56,173,254,5
2,233,1,141,254,52,169,32,9010
2110 DATA 141,253,2,172,96,59,162,0,17
3,95,59,32,13,56,96,240,5192
2120 DATA 59,20,76,253,59,169,32,141,2
53,2,160,1,140,247,59,169,9056
2130 DATA 20,205,247,59,176,3,76,121,6
0,160,0,140,249,59,169,3,6401
2140 DATA 205,249,59,176,3,76,115,60,1
69,0,133,133,169,10,133,132,6504
2150 DATA 173,249,59,162,0,32,2,54,141
,248,59,169,0,133,133,169,7271
2160 DATA 10,133,132,173,249,59,162,0,
32,2,54,133,172,138,133,173,7686
2170 DATA 24,169,8,101,172,141,91,60,1
73,91,60,205,248,59,176,4,8124
2180 DATA 76,109,60,36,172,247,59,162,
0,173,248,59,32,13,56,238,7261
2190 DATA 248,59,76,88,60,238,249,59,7
6,22,60,238,247,59,76,7,6756
2200 DATA 60,96,36,70,48,36,76,129,68,
142,123,60,141,122,60,160,5894
2210 DATA 0,140,125,60,200,140,124,60,
173,122,60,141,173,60,173,123,9074
2220 DATA 60,141,174,60,173,173,60,205
,124,60,173,174,68,237,125,60,9927
2230 DATA 176,5,76,186,60,53,36,238,12
4,60,208,232,238,125,60,76,9910
2240 DATA 156,60,96,65,65,36,65,53,76,
195,60,142,188,60,141,187,7873
2250 DATA 60, 172, 188, 60, 162, 0, 173, 187,
60,32,24,56,165,160,141,191,8327
2260 DATA 60,160,0,140,189,60,169,7,20
5,189,60,176,3,76,107,61,5935
2270 DATA 173,191,60,73,32,208,3,76,64
,61,24,173,187,60,109,189,6790
2280 DATA 60,133,160,169,0,133,161,172
,188,60,166,161,165,160,32,24,8362
1
ATA
iVE; MONEY ON;
300/XL/XE SOFTWARE
Atari Public Domain & Shareware
Software
Over 250 Theme Disks! Every disk
is Guaranteed!
Games! Graphics! Educational!
Music! Utilities! Home & Business!
Fast dependable world-wide service!
Send for your FREE descriptive
Catalog.
BELLCOM
P.O.Box 1043-G
Peterborough, Ontario
Canada K9J 7A5
CIRCLE #108 ON RUDER SERVICE CARD.
JULY A.N.A.L.O.O. Computing
2298 DATA 56,165,168,141,199,68,173,19
8,68,73,32,288,3,76,61,61,4873
2388 DATA 24,173,187,68,189,189,68,133
,85,173,198,68,73,128,133,168,9235
2318 DATA 165,168,32,52,55,24,173,187,
68,189,189,68,133,174,24,165,7819
2328 DATA 174,185,1,133,85,76,181,61,2
4,173,187,68,189,189,68,133,7129
2338 DATA 85,173,191,68,73,128,133,168
,165,168,32,52,55,24,173,187,7617
2348 DATA 68,189,189,68,133,174,24,165
,174,185,1,133,85,238,189,68,9877
2358 DATA 76,222,68,96,36,56,53,36,65,
58,36,67,54,76,128,61,1436
2368 DATA 169,255,141,252,2,168,8,148,
254,52,169,22,133,84,288,132,9586
2378 DATA 85,169,8,133,163,169,8,133,1
65,169,32,133,164,168,56,162,9145
2388 DATA 53,169,14,32,32,56,76,182,61
,28,211,288,193,195,197,32,9697
2398 DATA 116,111,32,118,185,181,119,3
2,182,111,118,116,115,32,162,61,5495
2488 DATA 169,161,32,18,55,76,218,61,1
7,47,32,218,197,212,213,218,1295
2418 DATA 266,32,78,181,119,32,68,185,
115,187,162,61,169,192,32,18,5565
2428 DATA 55,168,8,148,112,61,288,148,
111,61,136,148,114,61,288,148,9162
2438 DATA 113,61,174,113,61,173,111,61
,32,192,68,173,31,288,73,5,5681
2448 DATA 248,14,173,128,2,41,2,133,17
4,165,174,248,3,76,117,62,6981
2458 DATA 162,9,169,196,32,126,68,173,
111,61,141,188,61,173,113,61,6983
2468 DATA 141,189,61,238,111,61,288,3,
238,112,61,169,28,285,111,61,8887
2478 DATA 169,8,237,112,61,48,3,76,99,
62,168,6,148,112,61,288,5794
2488 DATA 148,111,61,24,173,113,61,185
,18,141,113,61,173,114,61,185,5846
2498 DATA 8,141,114,61,169,31,285,113,
61,169,8,237,114,61,48,3,4915
2588 DATA 76,99,62,136,148,114,61,288,
148,113,61,174,188,61,173,189,8661
2518 DATA 61,32,192,68,174,111,61,173,
113,61,32,192,68,173,31,288,8876
2528 DATA 73,3,248,14,173,128,2,41,1,1
33,174,165,174,248,3,76,7418
2538 DATA 1,63,162,9,169,196,32,126,68
,173,111,61,141,188,61,173,7683
2548 DATA 113,61,141,189,61,56,173,111
,61,233,1,141,111,61,173,112,7648
2558 DATA 61,233,8,141,112,61,173,111,
61,281,1,173,112,61,233,8,7117
2568 DATA 48,3,76,239,62,168,8,148,112
,61,169,28,141,111,61,56,5183
2578 DATA 173,113,61,233,18,141,113,61
,173,114,61,233,8,141,114,61,7883
2588 DATA 173,113,61,281,1,173,114,61,
233,8,48,3,76,239,62,146,6468
2596 DATA 114,61,169,31,141,113,61,174
,188,61,173,189,61,32,192,68,6533
2688 DATA 174,111,61,173,113,61,32,192
,68,173,128,2,41,4,133,174,5544
2618 DATA 165,174,248,3,76,94,63,162,9
, 169, 196, 32, 126, 68, 173, 111, 7696
2628 DATA 61,141,188,61,173,113,61,141
,189,61,56,173,113,61,233,18,6898
2636 DATA 141,113,61,173,114,61,233,8,
141,114,61,173,113,61,281,1,6949
2648 DATA 173,114,61,233,8,48,3,76,76,
63,168,8,148,114,61,169,5182
2658 DATA 31,141,113,61,174,188,61,173
,189,61,32,192,68,174,111,61,6979
2668 DATA 173,113,61,32,192,68,173,128
,2,41,8,133,174,165,174,248,9995
2678 DATA 3,76,186,63,162,9,169,196,32
,126,68,173,111,61,141,188,7674
2688 DATA 61,173,113,61,141,189,61,24,
173,113,61,185,18,141,113,61,5841
2698 DATA 173,114,61,185,8,141,114,61,
169,31,285,113,61,169,8,237,8219
2788 DATA 114,61,48,3,76,168,63,168,8,
148,114,61,268,148,113,61,6818
2718 DATA 174,188,61,173,189,61,32,192
,68,174,111,61,173,113,61,32,6137
2728 DATA 192,66,173,31,288,73,6,248,8
,173,132,2,248,3,76,224,8279
2738 DATA 63,162,39,169,16,32,126,68,5
6,173,113,61,233,1,133,168,7351
2748 DATA 174,111,61,165,168,32,99,59,
173,252,2,73,12,246,18,173,7545
2758 DATA 252,2,73,33,248,3,76,243,61,
173,252,2,73,12,248,8,6971
2766 DATA 173,254,52,248,3,76,88,64,32
,258,59,169,22,133,84,166,7589
2778 DATA 1,132,85,76,39,64,24,32,73,1
18,115,161,114,116,32,68,3585
2788 DATA 185,115,187,32,119,185,116,1
64,32,78,111,118,116,115,44,162,6332
2798 DATA 64,169,14,32,18,55,76,63,64,
13,32,88,114,181,115,115,3257
2888 DATA 32,211,212,193,218,212,32,16
2,64,169,49,32,18,55,173,31,5684
2818 DATA 288,73,6,248,3,76,78,64,169,
255,141,252,2,76,218,64,9645
2828 DATA 168,8,148,254,52,148,112,61,
288,148,111,61,169,28,285,111,9269
2838 DATA 61,169,8,237,112,61,16,3,76,
218,64,168,8,148,114,61,5373
2846 DATA 148,113,61,169,38,285,113,61
,169,8,237,114,61,16,3,76,4498
2858 DATA 287,64,172,111,61,174,114,61
,173,113,61,32,24,56,165,168,6653
2868 DATA 141,118,61,173,118,61,73,28,
248,3,76,187,64,238,254,52,9759
2878 DATA 24,173,113,61,185,1,133,161,
172,111,61,166,161,173,254,52,1851
2888 DATA 32,242,58,24,173,113,61,185,
18,141,113,61,173,114,61,185,6391
2898 DATA 8,141,114,61,76,123,64,238,1
11,61,288,144,238,112,61,76,9646
2988 DATA 188,64,96,98,53,28,8,8,167,4
,29,91,36,56,57,36,9714
2918 DATA 48,51,36,65,65,36,66,68,36,5
5,56,76,246,64,169,8,4686
2928 DATA 32,213,55,168,1,148,248,2,16
9,82,141,198,2,169,12,141,7828
2938 DATA 197,2,76,53,65,39,17,18,18,1
8,18,18,18,18,18,23,6273
2948 DATA 18,18,18,18,18,18,18,18,18,2
3,18,18,18,18,18,18,5438
2958 DATA 18,18,18,23,18,18,18,18,18,1
8,18,18,5,162,65,169,386
2968 DATA 13,32,22,55,168,1,132,84,169
,28,197,84,176,3,76,186,5787
2978 DATA 65,169,9,133,85,169,29,197,8
5,176,3,76,181,65,169,124,7362
2986 DATA 32,52,55,24,165,85,185,9,133
,85,76,77,65,238,84,76,5867
2998 DATA 64,65,169,21,133,84,168,8,13
2,85,76,157,65,39,1,18,2516
3888 DATA 18,18,18,18,18,18,18,24,18,1
8,18,18,18,18,18,18,5496
JULY A.IM.A.L.O.Q. Computing
3010 DATA 18,24,18,18,18,18,18,18,18,1
8,18,24,18,18,18,18,5542
3820 DATA 18,18.18,18,4,162,65,169,117
,32,22,55,76,297,65,39,3759
3838 DATA 124,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,7474
3048 DATA 32,32,32,32,32,32,32,32,32,3
2,32,32,32,32,32,32,7392
3050 DATA 32,32,32,32,32,32,124,162,65
,169,167,32,22,55,76,1,2594
3060 DATA 66,39,26,18,18,18,18,18,18,1
8,18,18,18,18,18,18,5622
3070 DATA 18,18,18,18,18,18,18,18,18,1
8,18,18,18,18,18,18,5518
3080 DATA 18,18,18,18,18,18,18,18,3,16
2,65,169,217,32,10,55,2417
3090 DATA 160, 0, 140, 242, 64, 169, 1, 32, 20
1,55,76,29,66,7,68,58,2682
3190 DATA 42,46,70,78,84,169,6,133,163
,169,0,133,164,160,66,162,9003
3110 DATA 21,169,1,32,161,55,168,1,148
,240,64,148,241,64,173,240,2371
3120 DATA 64,133,84,173,241,64,133,85,
169,20,133,163,160,64,162,219,1644
3130 DATA 169,1,32,130,55,169,64,205,2
22,64,144,3,76,175,66,238,9788
3140 DATA 242,64,169,3,141,239,64,169,
10,205,239,64,176,3,76,124,8959
3150 DATA 66,174,239,64,189,219,64,133
,160,165,160,32,52,55,238,239,2382
3160 DATA 64,76,95,66,238,248,64,169,2
0,205,240,64,144,3,76,165,9687
3170 DATA 66,169,1,140,240,64,24,173,2
41,64,105,18,141,241,64,169,210
3180 DATA 31,205,241,64,144,3,76,165,6
6,136,140,241,64,173,240,64,1454
3190 DATA 133,84,173,241,64,133,85,169
,127,285,83,3,144,18,173,242,660
3200 DATA 64,73,80,240,3,76,64,66,169,
1,32,201,55,32,117,61,4246
3210 DATA 173,252,2,73,33,248,3,76,8,6
6,169,255,141,252,2,96,8997
3220 DATA 57,68,36,52,76,223,66,32,151
,53,216,66,3,169,1,32,4154
3230 DATA 201,55,169,4,133,163,169,0,1
33,164,172,217,66,174,216,66,1813
3240 DATA 169,1,32,161,55,169,7,141,82
,3,173,219,66,141,85,3,6871
3250 DATA 173,218,66,141,84,3,169,4,14
1,89,3,169,0,141,88,3,3836
3260 DATA 162,16,169,0,32,86,228,169,1
,32,281,55,96,36,56,53,4225
3270 DATA 36,76,44,67,32,151,53,37,67,
2,160,8,140,40,67,169,4063
3280 DATA 0,133,163,160,20,162,53,169,
70,32,71,56,169,0,133,133,6193
3290 DATA 169,8,133,132,173,39,67,162,
0,32,2,54,133,174,138,133,6619
3300 DATA 175,166,174,189,14,53,73,32,
208,3,76,58,68,169,68,141,6200
3310 DATA 71,53,169,58,141,72,53,169,0
,133,133,169,8,133,132,173,8621
3320 DATA 39,67,162,8,32,2,54,133,174,
138,133,175,24,165,174,109,9078
3338 DATA 40,67,133,172,165,175,105,0,
133, 173, 166, 172, 189, 14, 53, 73, 8634
3348 DATA 32,208,3,76,227,67,173,40,67
,201,8,144,3,76,227,67,7178
3350 DATA 24,173,40,67,105,3,133,174,1
69,0,133,133,169,8,133,132,7978
3360 DATA 173,39,67,162,8,32,2,54,133,
172, 138, 133, 173, 24, 165, 172, 8941
3370 DATA 109,40,67,133,170,165,173,10
5,0,133,171,166,170,189,14,53,9380
3380 DATA 166,174,157,78,53,238,40,67,
76,111,67,24,173,40,67,105,5467
3390 DATA 6,141,70,53,24,173,40,67,105
,3,133,174,169,46,166, 174,8715
3400 DATA 157,70,53,24,173,40,67,105,4
,133,174,169,70,166,174,157,30
3410 DATA 70,53,24,173,40,67,105,5,133
,174,169,78,166,174,157,70,9528
3428 DATA 53,24,173,40,67,185,6,133,17
4,169,84,166,174,157,78,53,8801
3430 DATA 173,38,67,133,163,172,37,67,
162,53,169,70,32,220,66,76,7443
3440 DATA 81,68,169,224,133,163,169,8,
133,165,169,8,133,164,168,0,9113
3450 DATA 174,38,67,173,37,67,32,80,56
,96,68,17,32,76,88,68,2348
3460 DATA 160,0,140,82,68,169,5,285,82
,68,176,3,76,189,68,56,6337
3470 DATA 173,229,2,233,0,133,174,173,
230,2,233,4,133,175,165,174,2578
3480 DATA 41,0,141,83,68,165,175,41,25
2,141,84,68,169,8,133,132,8993
3490 DATA 173,84,68,178,173,83,68,32,5
6,54,174,82,68,157,94,53,6892
3500 DATA 173,84,68,141,238,2,173,83,6
8,141,229,2,24,173,82,68,7263
3518 DATA 105,1,133,162,164,162,174,84
,68,173,83,68,32,41,67,238,8228
3520 DATA 82,68,76,93,68,169,224,141,1
00,53,56,173,229,2,233,0,9010
3530 DATA 133,174,173,230,2,233,4,133,
175,165,174,41,0,141,83,68,7888
3540 DATA 165,175,41,252,141,84,68,169
,8,133,132,173,84,68,170,173,515
3550 DATA 83,68,32,56,54,141,244,2,173
,84,68,141,230,2,173,83,8707
3560 DATA 68,141,229,2,168,0,174,84,68
,173,83,68,32,41,67,56,4257
3570 DATA 173,229,2,233,0,133,174,173,
230,2,233,5,133,175,165,174,2690
3588 DATA 41,0,133,88,165,175,41,240,1
33,89,169,5,133,163,168,0,8871
3598 DATA 166,89,165,88,32,71,56,96,76
,51,69,72,138,72,152,72,5578
3600 DATA 238,2,53,173,2,53,73,7,240,3
,76,74,69,160,0,140,4879
3618 DATA 2,53,24,173,108,53,189,2,53,
133, 174 , 173, 109, 53, 105, O, 5650
3620 DATA 133,175,160,8,177,174,141,24
,208,174,2,53,189,94,53,141,8785
3630 DATA 9,212,104,168,104,170,184,64
,96,76,116,69,169,192,141,14,8779
3648 DATA 212,24,173,90,53,105,0,141,9
0,53,173,91,53,105,1,141,5567
3650 DATA 91,53,173,90,53,41,0,141,90,
53,173,91,53,41,255,141,8044
3660 DATA 91,53,173,150,53,133,163,169
, 0, 133, 165, 169, 39 , 133, 164, 172, 1286
3670 DATA 149,53,174,91,53,173,90,53,3
2,88,56,24,173,98,53,105,5144
3688 DATA 4,133,174,173,91,53,185,0,13
3,175,165,88,41,255,168,0,8993
3690 DATA 145,174,24,173,98,53,105,5,1
33,174,173,91,53,105,0,133,6709
3700 DATA 175,169,8,133,132,165,89,170
,165,88,32,56,54,168,0,145,7053
3710 DATA 174,24,173,90,53,105,37,133,
174,173,91,53,105,0,133,175,8122
3720 DATA 173,90,53,41,255,160,0,145,1
74,24,173,90,53,105,38,133,7437
JULY A.N.A.L.O.Q. Computing
49
LISTING 2 : ACTION!
3730 DATA 174,173,91,53,185,8,133,175,
169,8,133,132,173,91,53,178,9277
3748 DATA 173,98,53,32,56,54,168,8,145
,174,173,91,53,141,49,2,5574
3758 DATA 173,98,53,141,48,2,173,58,69
,141,1,2,173,49,69,141,4981
3768 DATA 8,2,96,55,36,67,52,36,76,67,
78,169,8,32,213,55,4181
3778 DATA 169,255,141,252,2,168,8,148,
47,2,32,85,68,168,1,148,5164
3788 DATA 248,2,169,12,141,198,2,169,2
,141,197,2,169,6,141,2,5885
3798 DATA 53,32,113,69,169,34,141,47,2
,165,89,141,63,78,165,88,6955
3888 DATA 141,62,78,168,8,132,87,169,8
,285,254,52,144,3,76,79,7454
3818 DATA 71,148,59,78,56,173,254,52,2
33,1,141,168,78,173,168,78,568
3828 DATA 285,59,78,176,4,76,79,71,79,
166, 8, 132, 84, 132, 85, 148, 7884
3838 DATA 69,78,169,7,285,68,78,176,3,
76,214,78,173,59,78,18,6114
3848 DATA 18,18,133,174,24,165,174,189
,68,78,133,172,166,172,189,14,557
3858 DATA 53,133,168,165,168,32,52,55,
238,68,78,76,178,78,32,59,6143
3860 DATA 55,76,243,78,22,32,32,65,66,
67,68,69,78,71,72,73,3114
3870 DATA 74,75,76,77,78,79,80,81,82,8
3,84,162,78,169,228,32,8226
3888 DATA 18,55,76,14,71,16,85,86,87,8
8,89,98,48,49,58,51,2616
3898 DATA 52,53,54,55,56,57,162,78,169
,253,32,22,55,76,53,71,5123
3900 DATA 28,32,32,97,98,99,188,181,18
2,103,104,105,106,107,108,189,7668
3918 DATA 118,111,112,113,114,115,116,
117,118,119,128,121,122,162,71,169,685
3920 DATA 24,32,22,55,24,165,88,185,16
8,133,88,165,89,185,8,133,7333
3938 DATA 89,238,59,78,76,149,78,24,17
3,62,78,185,96,133,88,173,8313
3940 DATA 63,70,105,4,133,89,160,0,132
,84,132,85,76,144,71,48,6002
3950 DATA 32,83,80,65,67,69,66,65,82,3
2,168,244,239,168,243,229,4781
3968 DATA 236,229,227,244,160,237,239,
242,229,160,230,239,238,244,243,168,39
lb
3970 DATA 244,239,160,246,233,229,247,
160,162,71,169,103,32,22,55,24,8988
3980 DATA 173,62,78,185,176,133,88,173
,63,78,165,4,133,89,160,8,6430
3990 DATA 132,84,132,85,76,216,71,40,1
60,160,160,160,160,160,160,160,3519
4000 DATA 166,32,83,84,65,82,84,32,175
,212,242,233,231,231,229,242,9167
4010 DATA 166,244,239,160,289,245,233,
244,160,168,168,160,160,160,166,160,81
13
4620 DATA 162,71,169,175,32,10,55,173,
31,208,73,6,240,15,173,132,8791
4038 DATA 2,248,18,173,252,2,73,33,248
,3,76,223,71,173,252,2,140
4040 DATA 73,33,240,3,76,12,72,169,255
,141,252,2,160,1,140,6,8818
4656 DATA 53,76,17,72,166,8,140,6,53,9
6,76,21,72,32,266,56,4227
4668 DATA 166,0,146,6,53,32,243,64,32,
64,70,173,6,53,240,3,5576
4070 DATA 76,29,72,169,0,32,213,55,96,
96,226,2,227,2,18,72,5954
Character Set Display Utility
by Dave Arlington
COPYRIGHT 1989 BY ANAL6G COMPUTING
IMPORTANT H8TE: AN '••" AT THE END
OF A LINE MEANS THAT THE LINE MRAPS
AR6UND TO THE NEXT LINE OF THE
LISTING. THE TWO LINES SHOULD BE
TYPED AS ONE, WITHOUT THE "•■■.
CHECKSUM DATA
[34 56 26 A8 52 CB 56 B8
7E ED CA 6D 57 AB 80 12
89 32 82 1
Global variables and defines
DEFINE RTI= ,, $48",
PHfl="$48",
PLAr-'SBS",
TXA^'SSA",
TAX="$AA",
TYA="$98" f
tay^'Sas",
START^'-S",
SELECT="5",
CPTI0N= ,, 3 M
BYTE dindex=$57,
nnien =$D40E,
Chbase=$D409,
color2=$2C6,
rowcrs=$54,
crsinh=$2F0,
colorl=$2C5,
Stick0=$278,
Ch =$2FC,
txtrow=$298,
wsync =$D40A,
finish
CARD savnsc=$58,
Vdslst=$200,
icbadr=$354,
tXtC0l=$291,
sdnctl
consol
chbas
C0lpf2
colcrs
lMargn
icsta
strigO
iCCOM
selfil
count,
=$22F,
=$DOIF,
=$2F4,
=$D018,
=$55,
=$52,
=$353,
=$284,
=$352,
es,
Sdlstl=$238,
MeMtop=$2E5,
icblen=$358,
RaHSet
BYTE ARRAY fnanes(56), filenMC2D),
dlspaceC5l2), csetC7J,
C0lS=I$7C $4C $8C
$6C $2C $5C $9C1,
dl=C112 112 112 $42 O O
130 $0E 2 2 130 $0E
2 2 130 $0E 2 2 130
$0E 2 2 130 $0E 2 2
130 $0E 2 2 130 $0E
2 $0E 2 $41 O 61
INCLUDE ,, D!CSET2.ACT"
PROC CI0=$E456CBYTE areg, xregl
PROC LoadFontCBYTE ARRAY naMefile
CARD addr)
Closed!
Openci,nanef iie,4,03
iCC0M=7
so
JULY A.M.A.L.O.G. Computing
icbadr=addr
icblen=1824
CI0C0,$1Q)
Close CD
RETURN
PROC GetFontCCARD addr BYTE filentiM)
BYTE letcnt
letcnt=B
Zero if i lenH,20)
IF fnaMesCfilenuM*8)832 THEN
filermdJz'D
filenMC2)=' :
while fnaMesCfileniiM*8+letcnt)»32
AND letcnt<8
DO
f i lenHCletcnt+3) =fnawes
Cfilenuh**8 + letcnt)
letcnt— +1
OD
filenMC0)=Ietcnt+6
filenHtletcnt+3) = ' .
filenMCletcnt+4)= , F
filenMfletcnt+BJz'N
filenMCletcnt+6)='T
LoadFontCfilenn, addr)
ELSE
MoveBlock(addr,$EB88,8)
FI
RETURN
PROC AllOCMeMC)
BYTE cnt
CARD temp
FOR cnt=0 TO 5
DO
tenp= C CHeMtop-$488) &$FC8G)
csetCcntJ=tewp RSH 8
neMtoprtenp
GetFont CteHp,cnt+l)
OD
csetC6)=$E8
tewp= C CMeMtop-$4881 &$FC88)
Chbas=teMp RSH 8
MeMtop=tewp
GetFonttteMp,8)
SaVMSC=tMeHt0p-S588)&$F888
Zero Csavnsc , 1288)
RETURN
PROC Dli2C)
EPHA TXA PHA TYA PHA1
count==+l
IF count=7 THEN
count=8
FI
colpf2=colsCcount)
chbase=cset(count)
CPLA TAY PLA TAX PLA RTI)
RETURN
nnien=192
dlspace==+256
dlspace==&$FF88
MoveBlock Cdl space, d 1,39)
dlspaceC4)=savMsc&$FF
dlspace(5)=savMsc RSH 8
d 1 space (37) =dlspace&$FF
dlspace(38)=dlspace RSH 8
sdlstl=dlspace
VdSlSt=Dli2
RETURN
PR8C ShOWFontsC)
BYTE cntl, cnt2, cnt3
CARD temp
Graphicste)
Ch=255
SdMCtl=8
AIlocMenC)
crsinh=l
color2=$8C
colorl=2
count=6
DliSetup2C)
SdMCtl=34
tenp=savMsc
dindex=8
IF selfiles>8 THEN
FOR cntl=8 TO selfiles-1
DO
rowcrs=8
colcrs=B
F8R cnt2=8 TO 7
DO
PutCfnanesCCcntl L5H 3)+cnt2))
OD
PutEC)
PrintC" ABCDEFGHIJKLMNOPQRST")
PrintEt ,, UUWXYZ8123456789")
PrintEC" abedefghi jklMnopqrstt
uvwxyz")
savHSC==+168
OD
FI
savnsc=teMp+1120
rowcrs=8
colcrs=8
PrintEC" SPACEBAR Wkt-Wl J I J A M 'M J -M m
HagaBggaaa'o
savnsc=teMp+1288
rowcrs=8
colcrs=8
Printf'B iMHBi start HIBTEEKE"
DO
UNTIL COnsol=START OR StrigB=B
OR ch=33
OD
IF Ch=33 THEN
Ch=255
f inish=l
ELSE
f inish=8
FI
RETURN
PROC DliSetup2C)
PROC MainC)
TitleScreenC)
JULY A.M.A.L.O.G. Computing
fcoiEft^ M
a
f inish=8
DO
FileScreenC)
ShowFontsQ
UNTIL finish=0
OD
Graphics to)
RETURN
LISTING 3 : ACTION!
IMPORTANT NOTE: AN ■■•■■ AT THE END
OF A LINE MEANS THAT THE LINE WRAPS
AROUND TO THE NEXT LINE OF THE
LISTING. THE TWO LINES SHOULD BE
TYPED AS ONE, WITHOUT THE ■■•".
CHECKSUM DATA
C4E 02 49 20 E4 FD 38 BB
66 E9 7E 37 FC 93 EC 8D
8F A6 32 BE FD DC IB E6
B2 6D 1
PROC dlilC)
PrintEC" by Dave Arlingta
on")
PrintEC" CO 1989 for ANALOG Cc
OMputing")
PrintEC"")
Pri nt C" Insert Disk with Fonts, Pt
ress HEED"J
DO
UNTIL COnsol=START OR Strig8=8
OD
RETURN
PROC StashFileCBYTE filenuM, col, row)
BYTE index, cnt,tenp
index=Cf ilenuM-i)*8
FOR cnt=index TO index+7
DO
teHp=Loc ate Ccol, row) &$7F
IF tenptt32 THEN
fnanesCcnt)=tenp
FI
col==+l
OD
RETURN
[PHA3
chbase=$EB
tPLA RTI1
RETURN
;go back to ROM set
PROC DliSetupC)
BYTE ARRAY tenp
nnien=192
tenp=sdlstl
tenp C14) ==+128 ;text window
sdnctl=8
Vdslst=dlil
SdMCtl=34
RETURN
; enable interrupts
;switch sets at
;call interrupt
PROC TitleScreenC)
jail this work to get
; upper and lower case
; in Graphics 2! !
GraphicsC2)
DliSetupC)
color2=8
crsinh=l
lmargn=8
RanSet= CneMtop-$400) &SFCOO
chbas=RanSet RSH 8
MeMtop=RaMSet
MoueBlockCRaMSet,$E208,512)
MoveBlockCRaMSet,$E008,8)
MoveBlOCk CRaMSet+8,$E100+24, 8)
MoveBlOCk CRanSet+48, SE18B+32, 8)
MoveBlOCk CRanSet+24,$E180+152, 8)
MoveBlOCk CRaHSet+32,$E100+168, 8)
rowcrs=3
colcrs=5
Pr i ntDE C6 , " ! HARACTER")
PrintDEC6," ttET")
PrintDEC6," XI5PLAY")
PrintDEC6," STILITY")
txtrow=8
tXtCOl=8
PROC MarkFileCBYTE COl, TOW)
BYTE Mark, letter
nark=LocateCcol,row)
IF Mark=32 THEN
letter=LocateCcol+l,row)
IF letterttiee THEN
selfiles==+i
IF selfiles<=7 THEN
color=28
Plot Ccol, row)
ELSE
self iles=7
FI
FI
ELSEIF Mark=28 THEN
self iles==-l
color=32
Plot Ccol, row)
FI
RETURN
PROC ClearScreenC)
BYTE crow, ccol, cnt
color=32
FOR crow=l TO 28
DO
FOR cnt=8 TO 3
DO
FOR ccol=cnt*10 TO 8+cnt*l0
DO
PlotCccol,crow)
OD
OD
OD
RETURN
PROC pauzCCARD tiM)
JULY A.M.A.L.O.G. Computing
CARD cnt
FOR cnt=l TO tin DO OD
RETURN
PROC FlipFontCBYTE col,row)
BYTE cnt, letter, let
let=LocateCcol,row)
FOR cnt=8 TO 7
DO
IF let»32 THEM
letter=Locate(col+cnt,row)
IF lettertt32 THEM
colcrs=col+cnt
Put(letter!$88)
colcrs=col+cnt+l
FI
ELSE
colcrs=col+cnt
Put(let!$88)
colcrs=col+cnt+i
FI
OD
RETURN
PROC SelectFilesO
BYTE oldrow, oldcol, Mark
INT row, col, delay
Ch=255
self iles=o
rowcrs=22
colcrs=i
SetBlockCfnaMes,56,32)
Print ("ET Jjgg to view fonts "J
PrintC 1 / lil^<U:i:i New Disk 11 )
row=l
col=l
FlipFont (row, col)
DO
IF Consol=SELECT OR (Stick8&2) =8»
THEM
pauz (2588)
oldrow=row
oldcol=col
row==+l
IF row>28 THEN
row=i
col==+18
IF COl>31 THEN
COl=l
FI
FI
FlipFont (oldcol, oldrow)
FlipFont (col, row)
FI
IF consol=OPTION OR (stiCkB&l) =8*
THEN
pauz (25883
oldrow=row
oldcol=col
row"-i
IF row<l THEN
row=28
col==-18
IF C01<1 THEN
COl=31
FI
FI
FlipFont (ol dc ol, oldrow)
FlipFont (col, row!
FI
IF (Stick8&4)=8 THEN
pauz (2588)
oldrow=row
OldCOl=COl
C0l==-18
IF CD1<1 THEN
C0l=31
FI
FlipFont (oldcol, oldrow)
FI ipFont (col , row)
FI
IF (Stick8&8)=8 THEN
pauz (2588)
oldrow=row
oldcol=col
col==+18
IF C0l>31 THEN
coin
FI
FlipFont (oldcol, oldrow)
FlipFont (col, row)
FI
IF Consol=START OR Strig0=8 THEN
pauz (18808)
MarkFile(col-I,row)
FI
UNTIL Ch=12 OR Ch=33
OD
IF Ch=12 OR selfiles=8 THEN
ClearScreenO
rowcrs=22
colcrs=l
PrintC Insert Disk with Fonts,")
PrintC 1 Press gEEfl "J
DO
UNTIL Consol=START
OD
Ch=255
EL5E
self iles=8
FOR row=i TO 20
DO
FOR COl=B TO 38 STEP 18
DO
Mark=Locate(col,row)
IF nark=28 THEM
self iles==+l
StashFi le Csel f iles,col+l,row)
FI
OD
OD
FI
RETURN
PROC FileScreenO
BYTE ARRAY name (28)
BYTE cnt, row, col, nunfiles
Graphics CO)
crsinh=l
color2=$52
colorl=12
PrintEC'i i i
continued on page 57
JULY A.N.A.L.O.B. Computing
TORUN .SYS
I've been programming in BASIC now for over three years and
have been frustrated by the fact that all I could do with an
AUTORUN.SYS is use my SETUP.COM program on my Atari
DOS 2.5 disk to make one of my BASIC programs load and
run when my system was booted. I envied assembly language
programmers with the power they had over the machine; so about
six months ago I started to teach myself assembler with the help
of my Assembler/Editor cartridge and a few good books.
: ^^^^^^j^00^;i^ with tk§ W^SSM,
JULY A.N.A.L.O.Q. Computing
It was about the time that I was starting to
understand the assembler that I received my
November '88 issue of ANALOG. To my
delight it contained an article and program
by LeRoy Baxter titled "AUTORUN.SYS
Secrets." I quickly studied it and typed it in.
It is a powerful and flexible tool, allowing
me to load, merge and run programs in any
way I need, along with displaying messages,
etc. I haven't even started to utilize it to its
fullest.
In my excitement I stopped and realized
that if I were still programming strictly in
BASIC, I wouldn't have an assembler and
would have been unable to utilize this great
tool. So for all of you who are strictly BA-
SIC programmers, I have written AUTO-
SYS.BAS, a BASIC version of Mr. Baxter's
program.
Type in Listing 1 (check your work with
BASIC Editor II, elsewhere in this issue) and
save a copy. You'll use it many times. Now
run the program. It will ask you to enter your
command line. You can now enter up to 119
characters of BASIC code (three lines minus
one character). Type it in as if you were go-
ing to execute it in immediate mode (i.e. no
line numbers). Make sure the code is legal
BASIC code, as there is no syntax error
checking. When you are finished, hit Return.
The program will now ask for the disk on
which to write the AUTORUN.SYS file. In-
sert the disk and hit Start. If all goes well you
will see the READY prompt, and your AU-
TORUN.SYS file is ready for the next time
you boot that disk.
You can write messages on the screen, au-
tomatically run a BASIC program, two-stage
LOAD and ENTER and even create an AU-
TORUN.SYS for a language other than BA-
SIC. It is everything the assembly language
program is, with the advantage that you don't
need an assembler, and you can use all the
special characters (such as the screen clear
and bell) and the quote mark without having
to specify them in their ATASCII values as
in the original version. For more information
on what the program can do and how it
works, read LeRoy Baxter's 'AUTO-
RUN.SYS Secrets" in Issue 66 of ANALOG.
This is how the BASIC modification works.
First it asks for your command line. After en-
tering your BASIC code into A$ (Line 130)
Lines 220-240 calculate the length and end-
ing address of the machine-language file to
be written. It then opens the AUTORUN.SYS
file on the disk and writes the two-byte iden-
tifier code and starting address (Line 270 and
DATA statement 1000) and the ending address
(Line 280) to the file. Next it writes Mr. Bax-
ter's program byte for byte to the file (Line
290 and DATA statements 1010-1060). Next
your command line is written from A$ (Line
300). Finally, a carriage-return character, re-
quired by the program, and the starting ad-
dress of the program, required for an
autoboot file, are written to the file (Line 310
and DATA statement 1070). The file is then
closed, and you're ready for action.
David Schoch is 41 years old, happily mar-
ried and the proud father of an 18-year-old
daughter. He has been having a love affair
with his Atari computer for three years, and
his wife has accepted this mistress and con-
siders her a ' 'good friend. ' '
JULY A.N.A.L.O.Q. Computing
LISTING 1: BASIC
1/1
EI 1 REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXM
RH 2 REM * AUT0RUN.SY5 MAKER *
EY 3 REM * by David SchOCh *
TB 4 REM * *
UR 5 REM * COPYRIGHT 1989 *
LV 6 REM * BY ANALOG COMPUTING *
EO 7 REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXM
NN 8 REM
ZN 100 DIM A$tll9) :COUNT=0
OP 110 POKE 82,0!? CHRSC125J : POSITION 8,2
LP 120 ? " AUT0RUN.SY5 Creator":
? :? "*Input Your Connand Line -119 Ch
ar Max.*"; :?
ZE 130 INPUT ttl6,A$
MO 140 COUNT=LENlA$) :IF C0UNT=8 THEN 418
10 150 POKE 82,2
OU 160 ? CHR$C125) : POSITION 2,6
KB 170 ? "Insert Disk on which you wish t
o"
NT 180 ? "write new AUTORUN.SYS into Driv
e ttl."
MO 190 ? :? "Press rtf:1:H when ready...";
RU 200 IF PEEKC53279><>6 THEN 200
JK 218 ? :? :? "Creating. . .AUTORUN. SYS. . .
II I
OU 220 LENGHT=123+C0UNT+16384
MT 230 MSBrlNKLENGHT/ZSei
UI 248 L5B=LENGHT-CMSB*256)
OF 250 TRAP 480:0PEN ttl, 8, 8, "D : AUTORUN . SY
S"
UW 260 RESTORE 1888
UY 270 FOR 1=1 TO 4 : READ N : PUT ttl, N: NEXT
I
XP 280 PUT ttl,LSB:PUT ttl, MSB
TA 290 FOR 1=1 TO 123 : READ N : PUT »1,N:NEX
T I
DU 300 FOR 1=1 TO COUNT : N=ASC CA$ (I, I) ) : PU
T ttl,N:NEXT I
MJ 310 FOR 1=1 TO 7: READ N:PUT ttl, N: NEXT
I
LD 320 CLOSE ttl
DN 330 ? CHR$C125J : END
VD 40O TRAP 400O0:? :? "ERR0R-";PEEKC195J
SEND
LU 410 ? :? "ERROR- NO COMMANDS ENTERED":
END
DL 1000 DATA 255,255,8,64
UJ 1018 DATA 162,36,189,26,3,201,69,240,5
,202,202,202,16,244,232,142,83,64,189,
26,3
MB 1020 DATA 133,203,169,65,157,26,3,232,
189,26,3,133,204,169,64,157,26,3,168,8
,148
IY 1030 DATA 82,64,177,203,153,65,64,208,
192,16,144,246,169,83,141,69,64,169,64
,141,70
MP 104O DATA 64,96,0,0,8,0,0,8,0,0,0,0,0,
0,0,0, 0,0,0,0,0
UI 1050 DATA 172,82,64,185,123,64,281,155
,240,6,238,82,64,168,1,96,72,138,72,17
4,83
HM 1060 DATA 64,165,203,157,26,3,232,165,
204,157,26,3,104,170,104,160,1,96
HZ 1070 DATA 155,226,2,227,2,8,64 f=)
JULY A.N.A.L.O.B. Computing
continued from page 53
T
VJ
FOR rowcrsn TO 28
DO
FOR COlcrs=9 TO 29 STEP 9
DO
Put (1241
OD
OD
rowcrs=21
colcrs=0
PrintEC"| ' '
— i 1 "J
PrintEC'l
PrintC'"-
I")
DO
nuHf ilesrfl
Closed)
OpenCi,"D:*.FNT",6,0)
row=i col=l
rowcrs=row colcrs=col
DO
InputMD CI, nawe, 20)
IF na«eC3)>64 THEN
nuMf iles==+l
FOR cnt=3 TO 10
DO
Put Cnane Cent))
OD
row==+l
IF row>20 THEK
row=l
col==+io
IF C0l>31 THEN
COl =
FI
FI
rowcrs=row
colcrs=coi
FI
UNTIL icsta>$7F OR nuMfiles=80
OD
Close CI)
SelectFilesC)
UNTIL Ch=33
OD
ch=255
RETURN FI
continued from page 11
LISTING 1: BASK
CHAOS
AE 10 REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
CHAOS *
by Alfredo L. Acosta *
*
COPYRIGHT 1989 *
BY ANALOG COMPUTING *
AG 16 REM xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
BM 17 REM
ME 20 GOSUB 1000
QUE
ZP 11 REM *
CO 12 REM *
FY 13 REM *
IP 14 REM *
YU 15 REM *
EEHSCHia
KB 29 REM
SL 30 GRAPHICS 24JP0KE 709,14:POKE 710, O:
COLOR 1
LH 40 PLOT AX,AY:PLOT BX,BY;PL 0T CX,CY
AC 49 REM ■J<iiaH:U*f;TJiH:f
ER 50 X=INTCRNDC0)*31O)+l:Y=INTCRNDC0)*18
5)+l:PL0T X,Y
DP 59 REM ■:ft».'B;MliiraB
SS 60 Z=INTCRNDC0)*3)+1
ZB 70 IF Z=l THEN M=ABS CAX-X) : N=ABS CAY-Y)
:D=AX:E=AY:GOTO 100
FA 80 IF Z=2 THEN M=ABS CBX-X) : N = AB5 CBY-Y)
:D=BX:E=BY:GOTO 100
PI 90 M=ABSCCX-X) :N=ABSCCY-Y) :D=CX:E=CY
KM 100 IF X>D THEN X=D+M/2:G0T0 120
ZJ 110 IF X<D THEN X=D-M/2
PX 120 IF Y>E THEN Y=E+N/2 : GOTO 140
CK 130 IF Y<E THEN Y=E~N/2
TA 140 PLOT X,Y
5G 150 IF PEEKC53279) <>5 THEN 60
KC 160 GOTO 2000
QF 999 REM
INITIALIZATION
UM 1000 DIM A$C193):P0KE 712,148:P0KE 752
,1:? CHRSC125)
NL 1010 AX=160:AY=176:BX=64:BY=16:CX=256:
CY = BY
OK 1020 POSITION 13,2!? ■■*** CHAOS ***" : p
05ITI0N 5,6
CZ 103O ? "This progran will place three
dots on the screen to fori* a triangle.
■I ■
BA 1040 ? "It will then place a dot rand
only on the screen. Fron there it will
randoMly choose a direction ";
WB 1050 ? "toward one of the three start
ing dots and place a new spot 1/2 th
e distance ■■;
MX 1060 ? "towards it. Thislast step will
be continually repeatedfron the last
new spot. ■■;
UU 1070 ? "Instead of total coverage o
f the area within the triangle, surpri
sing patterns ewe rge!"
GZ 1080 ? :? "Press im**J to dump to pri
nter."
NQ 1090 ? :? "Press gJEEfl t0 begin."
NK 1100 IF PEEKC53279)<>6 THEN 1100
AE 1110 RETURN
LK 1999 REM E3M3IM3IEEI
DT 2000 RESTORE 3000:LPRINT CHRS C27) ; CHRS
C64)
RN 2010 FOR T=l TO 61:READ Q : POKE 1535+T,
Q : NEXT T : DM=PEEK C88) +PEEK C89)*256 : DM=D
M+40*191
RQ 2020 LPRINT CHRS C27) ; "3"; CHRS C20) : FOR
U=DM TO DM+39
MU 203O AS=CHRSC0) : AS C192) =CHRS C0) : AS C2) =
AS
KN 2040 A=U5RC1536,V,ADRCA$)) : LPRINT CHR$
C27) J ,, K";CHR$C192) j CHRS CO) ; AS
XF 2050 NEXT U:END
CO 3000 DATA 104,104,141,21,6,104,141,20,
6,104,141,27,6,184,141,26,6,160,193,17
3,255,255,136,248,35,141,255,255,238
QI 3010 DATA 26,6,240,21,173,20,6,56,233,
40,141,20,6,144,4,24,76,19,6,206,21,6,
76,19,6,238,27,6,76,33,6,96 fq
JULY A.N.A.L.O.Q. Computing
by Tom Hudson
As promised last issue, we're going to
cover more 6502 instructions this
time, and begin exploring the world
of simple mathematical operations.
Before we start with the math oper-
ations, let's look at an instruction that will
help us during the testing of the programs we
write in this column.
BREAKing Away
Remember the do-nothing program from
last issue? When we executed it with the "G"
(execute program) command with the assem-
bler editor cartridge, it ran forever. This is
hardly a good way to test programs. Imagine
trying to stop the program at a specific in-
struction with the Break key when hundreds
of thousands of operations are being execut-
ed each second. You can see that this would
be nearly impossible.
Luckily for us, the 6502 has a handy in-
struction called BRK (or BREAK). This in-
struction does the same thing as the Break
key on the keyboard when an assembly pro-
gram is executing. The nice part is that it will
stop the program exactly where we want to
to stop.
The short program below has a BRK in-
struction after the load accumulator (LDA)
instruction. The accumulator will be loaded
with $4F (79 decimal) and the computer will
stop. Type the program into your computer
and assemble it into memory with the ASM
command.
10
*=
$0600
; START ADDRESS
20
LDA
«$4F
; LOAD ACCUMULATOR
30
BRK
; AND STOP
40
.END
After the program is assembled, go to the
DEBUG mode with the BUG command. To
execute the short program, type:
G 600
The program will execute in a fraction of
a second and the computer will return with
a display similar to this
0602 A=4F K=00 Y=00 P-30 S-00
Note that the accumulator (A) equals $4F.
The X, Y, processor status and stack registers
are also displayed, but have no significance
to us at this time, since we didn't change
them.
Now you can see that the BRK instruction
can be helpful in the debugging stage of a pro-
gram. We will be using it to stop the com-
puter when we want to check the results of
certain operations.
Using Index Registers
Index registers were mentioned briefly last
issue. As you may recall, there are two in-
dex registers in the 6502, the X and Y
registers. These two registers are built into
the 6502 microprocessor chip. Each is made
up of eight bits, allowing a range of values
from 0-255.
The first instructions we'll look at are the
LDX (load X) and LDY (load Y) instructions.
These instructions are similar to the LDA
(load accumulator) instruction we examined
last time. Their formats are:
LDX #n
(IMMEDIATE)
LDX nn
(ABSOLUTE)
LDX n
(ZERO PAGE)
LDX nn,Y
(INDEXED Y)
LDX n,Y
(ZERO PAGE INDEXED Y)
LDY #n
(IMMEDIATE)
LDYnn
(ABSOLUTE)
JULY A.N.A.L.O.G. Computing
LDY n (ZERO PAGE)
LDYnn,X (INDEXED X)
LDY n,X (ZERO PAGE INDEXED X)
The LDX and LDY instructions place a
specified value in the X or Y register, respec-
tively. For example, the following instruction
will load the X register with $3A (58
decimal):
LDX #3A
The following instruction will load the Y
register with the contents of Memory Loca-
tion $3F00:
LDY $3F00
The following instruction will load the X
register from the page zero-Location $4D,
which is the attract mode counter:
LDX $4D
Like the LDA instruction, both the LDX
and LDY instructions set the sign and zero
flags depending on the number loaded into
the register.
Storing the contents of the X and Y
registers is just as easy as loading them. The
following addressing modes are available with
the STX (store X) and STY (store Y) in-
structions:
STX nn (ABSOLUTE)
STX n (ZERO PAGE)
STX n,Y (ZERO PAGE INDEXED Y)
STY nn (ABSOLUTE)
STY n (ZERO PAGE)
STY n,X (ZERO PAGE INDEXED X)
Unfortunately for us, the designers of the
6502 decided to limit indexed store X and Y
JULY A.N.A.L.O.Q. Computing
instructions to page zero, even though there
is a non-zero-page load instruction. This is
simply something assembly programmers
must live with.
Like the STA instruction, the STX and
STY instructions do not affect any status
flags.
The STX and STY instructions are very
easy to use. For example, to store the X
register at location $4FFB, simply use the in-
struction:
STX $4FFB
In addition to the LDX/LDY and STX/STY
instructions, the 6502 provides four more in-
structions which help the programmer with
X/Y operations. These are the transfer in-
structions.
The transfer instructions allow quick move-
ment of information from one register to
another. They are TAX, TAY, TXA and TYA.
Two other transfer instructions, TSX and
TXS, are used in stack operations, and we'll
look at them in a later article.
The TAX and TAY instructions transfer the
contents of the accumulator (A) to the X or
Y register, respectively. The A register is un-
changed.
The code below illustrates how the TAX
instruction works. Type this short program
into your computer and assemble it into
memory:
10
*z
$0600
START ADDRESS
20
LDA
»S0F
PUT SOF IM A
30
TAX
PUT IN X, TOO
40
LDA
8S6A
PUT S6A IN A
50
TOY
NOW PUT IN Y,
60
BRK
AND STOP!
78
.END
Line 20 loads the accumulator with $OF,
(15 decimal).
Line 30 transfers the contents of the ac-
cumulator to the X register. At this point both
the accumulator and the X register will con-
tain $OF.
Line 40 loads the accumulator with $6A
(106 decimal).
Line 50 transfers the contents of the ac-
cumulator to the Y register. Now the accumu-
lator and the Y register will contain $6A. The
X register will be unchanged.
Line 60 will BREAK the execution of the
program.
After the program is assembled into
memory, go to DEBUG mode and execute it
by typing:
G 600
After execution, the screen of your com-
puter should look like this:
0606 A=6A X=OF Y=6A P=30 S=80
You can see that the X register contains
$OF, and that the A and Y registers contain
$6A. Try some different combinations and
observe the results.
The two other transfer instructions we are
concerned with here are the TXA and TYA
instructions. As you may have guessed, these
instructions do the opposite of the TAX and
TAY instructions. That is, TXA will trans-
fer the contents of the X register to the ac-
cumulator, and TYA will move the Y
register's contents to the accumulator.
Here's a small problem for you to solve us-
ing the instructions we've covered so far. This
is a simple data-manipulation operation us-
ing the A, X and Y registers and as many lo-
cations as necessary.
Problem: Write a program which starts
with A=$03, X=$07 and Y=$14. Then write
the code necessary to change these registers
so that when the program ends, the registers
are A=$07, X=14 and Y=$03.
The code necessary to perform this change
is only four lines long, and there are many
ways to do it. Next issue I'll show several pos-
sible solutions.
This issue, we've only shown how to make
the X and Y registers contain the values we
want. In order to make the X and Y registers
do some real work, we'll need to cover the
branch-on-condition instructions. These will
be discussed next issue, along with X and Y
register indexing techniques.
ItAUADDsUp
I'm sure that, by now, just about every per-
son reading this column wants to start work-
ing with something more interesting than
loading and storing bytes, right? Well, let's
take a break from all that admittedly dull stuff
and get on with something fun— actual ad-
dition.
We'll start out with some simple addition,
working with values from 0-255. This is
known as single-byte integer arithmetic, and
is the simplest kind of math on the 6502.
Why only integers from 0-255? Remem-
ber that all arithmetic operations must be
processed through the accumulator, or A
register. The accumulator is made up of only
eight bits, and can't hold any number great-
er than 255. The accumulator doesn't know
what a decimal point is either, so we are
limited to integers for the time being.
Binary or BCD?
The 6502 microprocessor has the option
of performing arithmetic instructions in two
different modes, binary and binary-coded
'The most useful program for the Atari since Print Shop!*"
FORMS GENERATOR
for the Atari 800, 800XL, 65XE, 130XE
Designed by Jeff Brenner, columnist for Computer Shopper
magazine, of "Applying The Atari" fame, and author of book
and magazine articles in COMPUTE!, ANALOG and others
LOOK WHAT YOU CAN DO WITH FORMS
GENERATOR: Purchase merchandise by mail? Next
time, send a customized purchase order form! Does
your home or business ever need statements, in-
voices, proposals, job work orders, gift certificates,
etc.? No problem! Use FORMS GENERATOR'S scrolling spreadsheet-
style screen to design almost any form to suit your exact needs. What
you see on-screen is what you get on paper! Use the text mode with any
80-column printer, or the high-res graphics mode with the Epson,
Gemini/Star, Okidata, Panasonic or Prowriter for remarkably realistic
forms. BUT THAT'S JUST THE BEGINNING: Once you've designed a
form, you can program FORMS GENERA TOR to make all calculations
automatically! Imagine: after you enter quantities, descriptions and
prices, FORMS GENERATOR moves about the form calculating ex-
tended prices, subtotals, and even the sales tax! Like magic! (Sample
invoices included). You can also use FORMS GENERA TOR for record
keeping, since you can save filled forms to disk!
NAMED A "BEST BUY" IN 8-BIT SOFTWARE BY ANTIC MAGAZINE, JANUARY 1988.
Our "down to planet Earth" price: Only $23.95 (product #ATA611).
FOR C.O.D. ORDERS CALL (516) 932-5330
Send coupon to:
Twenty-Fifth
Century™
□ YES! Please rush me FORMS GENERATOR(product
#ATA611) with complete documentation. 90-day Iree
replacement warranty, full customer service support and
20-page Atari software catalog. I am enclosing $23.95
* S3. 50 shipping and handling.
□ Check/Money Order enclosed DC.OD. (add$2.50)
Name
Softujore Division
Dept. AT 2
254 Fifth Rvenue
Suite 301
New Vorh NV 1 000 1
City-
State .
.Zip_
DEALER INQUIRIES INVITED.
New York State residents add 8% sales tax.
'The Print Shop and Alan are registered trademarks of Broderhund Sottware and Alan
Corp., respectively. — Prices and availability subject to change without notice.
CIRCLE #116 ON RUDER SERVICE CARD.
BO
decimal (BCD). Let's look at how both these
systems work.
Binary arithmetic, as we have noted before,
produces numbers from 0-255 in one byte.
All eight bits are used for the number. These
numbers can be considered either signed or
unsigned by the programmer, but they are
handled the same by the computer. Since all
eight bits are used to represent the number,
the value of a byte is simply the byte's decimal
contents.
BCD arithmetic, on the other hand, is a
more human approach to computer math, and
easier to use in input/output operations.
In BCD math, the byte is split into two
four-bit sections, or NYBBLES. Each nyb-
ble contains one decimal number, from 0-9.
With this system, each byte contains two
decimal numbers, allowing easy Base-10
number storage. Of course, the BCD num-
bering system requires more storage than bi-
nary, since the value of a byte can now only
range from 0-99, rather than 0-255. The nice
thing about BCD is that when looking at the
hexadecimal representation of the byte, you
see the decimal value of the byte. For exam-
ple, $56 is 56 decimal.
We'll cover BCD math later in this series,
when we get into screen I/O. For now we'll
stick with binary math. Even though it may
seem more difficult, binary math is much
more important at this early stage.
Getting Into BINARY
The 6502 can handle two different types
of math, so how does it know which one you
want to use? The answer lies in a single-bit
flag in the processor status register, called the
decimal-mode flag.
The decimal-mode flag has two states.
When set (1), the decimal mode is selected.
When cleared (0), the binary mode is select-
ed. This flag is extremely important! The fol-
lowing example illustrates this fact.
Let's say you want to add two binary num-
bers, $23 and $18. A normal binary add
would give a result of $3B.
What if the decimal-mode flag was set by
mistake? The add would give a result of $41,
the sum of 23 and 18. If your program adds
or subtracts numbers with the decimal mode
incorrectly set, the results can be very con-
fusing. Moral: always know the setting of the
decimal-mode flag.
For our purposes, until further notice, we
JULY A.N.A.L.O.Q. Computing
will always clear the decimal mode with the
CLD (clear decimal mode) instruction. The
format of this instruction is:
CLD
This is a simple instruction, but easy to for-
get. If you have trouble remembering things
(like myself), I suggest that you tape an ap-
propriate message to your monitor, computer,
forehead, etc. This will save an incredible
amount of debugging time.
Important: When writing assembly subrou-
tines for BASIC programs, you must clear the
decimal mode if you're doing any arithmetic
in the subroutine. BASIC uses the floating-
point arithmetic package built into the com-
puter, which sets the decimal mode. The first
time I wrote a BASIC assembly subroutine
with math, it took me two days to find the
problem. Once again, write a note.
Now that I've warned you about the evils
of decimal-mode ignorance, let's get on with
some actual addition.
Add 'Em Up!
First we'll cover single-byte additions, the
simplest kind. These types of additions are
sufficient for general counters, changing
color registers, or any operation in which the
result will not exceed 255.
The 6502 has only one add instruction,
ADC add with carry. This instruction has the
following formats:
ADC #n (IMMEDIATE)
ADC nn (ABSOLUTE)
ADC n (ZERO PAGE)
ADC (n),Y(PRE-INDEXED INDIRECT)
ADC (n),Y (POST-INDEXED INDIRECT)
ADC n,X (ZERO PAGE INDEXED X)
ADC nn,X (INDEXED X)
ADC nn,Y (INDEXED Y)
The ADC instruction adds the number at
the memory location specified in the oper-
and to the accumulator and places the result
in the accumulator. Depending on the result,
the 6502 will alter the sign, overflow, zero
and carry flags.
Let's look at a simple single-byte addition
operation, using the immediate format. We
will add 23 and 14 decimal and place the
result in a location called ANSWER. Here's
the code needed to perform this operation.
JULY A.N.A.L..O.Q. Computing
IB LDA 823 ; PUT 23 IN A
20 CLC ; CLEAR CARRY FOR ADD
30 ADC H14 ; AND ADD 14 TO IT!
40 STA ANSHER ; SAUE RESULT
The first line places the number 23 in the
accumulator. Simple enough, right?
The second line introduces a new opera-
tion code, CLC (clear carry). The CLC in-
struction places a in the 6502 carry flag.
This is an important instruction to remem-
ber, and should always be present in single-
byte addition operations.
Why is the CLC instruction so important?
The answer lies in the structure of the 6502
ADC instruction. Remember, ADC means
"add with carry." Whenever an addition is
performed on the 6502, the result is set to
ACCUMULATOR + OPERAND +
CARRY.
Here's an example of what can go wrong
when the programmer is not sure of the con-
tents of the carry flag. Let's say the carry hap-
pens to be set to 1. Fred the careless pro-
grammer wants to add 1+1 to verify that the
answer is indeed 2, so he writes the follow-
ing code:
LDA 81
ADC 81
STA ANSHER
When Fred runs the program, he is as-
tounded to find that 1 plus 1 is 3! If Fred had
only inserted a simple CLC instruction, his
life would have been much happier, as well
as more accurate.
Suffice it to say that in any single byte ad-
dition operation, you should always clear the
carry flag before the ADC instruction.
The third line adds 14 to the accumulator,
giving a result of 37 ($25 hex), which is, of
course, correct.
You can use any of the eight addressing
modes with the ADC instruction. All produce
the same results, they just get their data with
different methods.
Flag-waving
Earlier I mentioned the flags altered by the
ADC instruction. These are the sign, over-
flow, zero and carry flags.
The sign flag indicates the sign of the
result. The contents of the accumulator's 7th
bit are placed in this flag. If the flag is af-
ter an add, the result is considered positive.
A 1 in this flag indicates a negative result.
See Issue # 72's Boot Camp for an in-depth
discussion of the sign flag.
The overflow flag is set to the exclusive/or
of Bits 6 and 7 of the result. The overflow
flag is rarely used, but it's a good idea to
know what happens to it during processing.
The zero flag is set to 1 if the result of the
add was 0, and is set to if the result was
not 0.
The carry flag is set to 1 if the result of
the add is greater than 255. This flag is im-
portant in multi-byte addition (for numbers
greater than 255). We'll be examining multi-
byte operations next issue.
All these flags are important in the com-
puter's decision-making process. Depending
on the result of an operation, the program-
mer can go to other parts of the program us-
ing comparison and branch instructions
(similar to IF/THEN statements in BASIC).
We will also cover these operations next
issue.
Starting With Subtraction.
Now that we've covered simple addition,
let's do a little subtraction. Subtraction is just
as easy as addition, with a couple of simple
differences. Shown below are the formats of
the 6502 subtraction instruction, SBC (sub-
tract with borrow). You will notice that the
SBC has the same formats as the ADC in-
struction.
SBC #n (IMMEDIATE)
SBC nn (ABSOLUTE)
SBC n (ZERO PAGE)
SBC (n,X) (PRE-INDEXED INDIRECT)
SBC (n),Y (POST-INDEXED INDIRECT)
SBC n,X (ZERO PAGE INDEXED X)
SBC nn,X (INDEXED X)
SBC nn,Y (INDEXED Y)
The SBC instruction subtracts the number
at the memory location specified in the oper-
and from the accumulator and places the
result in the accumulator. Like the ADC in-
struction, the sign, overflow, zero and carry
flags will be altered.
For the time being we'll work only with
single-byte subtractions, since they're the eas-
iest to understand. We will subtract 14 from
23 decimal and place the answer in a loca-
tion called ANSWER. Here's the code need-
ed for this operation:
10 LDA 823
20 SEC
30 SBC 814
40 STA ANSHER
PUT 23 IN A
SET CARRY FOR SUB
AND SUB 14 FROM IT!
SAUE RESULT
61
The first line simply places the number 23
in the accumulator.
The second line introduces another new
operation code, SEC (set carry). This instruc-
tion sets the carry flag to 1. Like the CLC
instruction in single-byte additions, the SEC
instruction is a must for all single-byte sub-
tractions.
The SBC instruction is strange in that it
subtracts the contents of the memory byte in-
dicated in the operand and the complement
of the carry flag from the accumulator, plac-
ing the result back in the accumulator. Here's
an example. Let's say the accumulator con-
tains 4 decimal, and we're subtracting 3
decimal from this. Assume the carry flag is
clear (0). The computer will subtract 3 from
4, then subtract 1 from this (the complement
of the carry flag), giving a result of 0.
By setting the carry to 1, we make sure that
the subtraction of our two numbers is un-
affected by the subtraction of the carry's com-
plement, which in this case is 0. The carry
flag is used as a borrow in subtraction and
not necessary in single-byte operations.
The third line performs the subtraction.
The result will be 23-14-0 or 9.
The last line of the program places the
result in the location labeled ANSWER. The
result will still be in the accumulator.
Like the ADC instruction, the SBC in-
struction works the same with all eight ad-
dressing modes available with the instruction.
The SBC instruction affects the 6502 status
flags in the same way as ADC.
Applying What We've Covered
We've now progressed to the point where
we can write simple math programs using ad-
dition and subtraction. Let's write a program
to solve the equation:
4+5+34-(8-7)=?
Unlike BASIC, we can't simply code this
equation right into our computer. In assem-
bly language, it's up to the programmer to
figure out the procedure needed to obtain the
result and code it.
Let's look at the equation shown above. In
any mathematical equation, the expressions
in parentheses must be solved before proceed-
62
ing with the rest of the equation. If we sim-
ply solve the equation from left to right, we
will get an incorrect answer:
4+5+34-8-7=28
In order to solve the equation correctly, we
must solve it as follows:
(8-7) = 1
4+5+34-(l) = 42
Now that we know how to proceed, let's
write a section of code to solve the equation:
$0600
88
87
HOLD
84
834
10 *=
20 CLD
30 LDA
40 SEC
50 SBC
60 5TA
70 LDA
80 CLC
90 ADC 85
0100 CLC
0110 ADC
0120 SEC
0130 SBC
0140 STA
0150 BRK
0155 J
0160 HOLD
0170 ANSWER *=*+l
0180 .END
HOLD
ANSWER
»I«1
NO DECIMAL MODE!
PUT 8 IN A
SET CARRY,
SUBTRACT 7 FROM 8
AND SAUE RESULT
NOW PUT 4 IN A
CLEAR CARRY,
ADD 4 AND 5
CLEAR CARRY AGAIN
ADD 34 TO LAST 8
SET CARRY
SUBTRACT EARLIER 8
AND SAUE ANSWER!
ALL DONE!
TEMP. HOLD AREA
FINAL RESULT
Line 10 tells the assembler to place the pro-
gram at Location $0600, a safe location in
computer memory.
Line 20 clears the decimal mode, to avoid
any accidental BCD results.
Line 30 places the number 8 in the ac-
cumulator.
Line 40 sets the carry flag to get ready for
a single-byte subtract.
Line 50 subtracts 7 from 8, leaving the
result in the accumulator.
Line 60 stores the result of the expression
in parentheses at a memory location called
HOLD. This is done because we will need
this number in a moment.
Line 70 places a 4 in the accumulator in
order to start solving the first part of the
equation.
Line 80 clears the carry flag to get ready
for a single-byte add.
Line 90 adds 5 to the accumulator, leaving
the result in the accumulator.
Line 100 clears the carry again for the next
addition. In this case, the CLC is not neces-
sary since we know the previous add did not
exceed 255, but it's a good idea to get into
the CLC habit.
Line 110 adds 34 to the accumulator, once
again leaving the result in the accumulator.
Line 120 sets the carry flag for the next sub-
tract operation.
Line 130 subtracts the result of the expres-
sion in parentheses (stored in HOLD) from
the accumulator and gets the final result.
Line 140 places the final result in the
memory location called ANSWER.
Line 150 breaks the program execution. At
this point the accumulator should equal 42
decimal ($2A hex).
Line 160 and 770 set up the one-byte storage
areas, HOLD and ANSWER. The assembler
directive *=*+l simply tells the assembler
to reserve one byte for each label.
Line 180 tells the assembler that the end
of the source code has been reached.
After this code is typed in and assembled
into memory, execute the program from DE-
BUG mode with the command:
G600
The program will execute very quickly and
return with a screen similar to this:
0618 A=2A X=0F Y=6A P=31 S=0B
Note that the accumulator contains $2A (42
decimal). This is the correct answer to our
equation.
This example shows how you can perform
simple add/subtraction operations in assem-
bly language. Of course, we're limited to one-
byte integers, but we'll soon exceed these
limitations.
Until Next Time. . .
Try your own problems until you're profi-
cient with the 6502 add-and-subtract opera-
tions. Try using the various addressing modes
to see how they work. In order to learn as-
sembly language (or any other language, for
that matter), you'll have to roll up your
sleeves and dig in.
Next issue will cover a lot of material, in-
cluding the assembly equivalent of the BAS-
IC IF/THEN statement, index register usage
and multi-byte addition and subtraction, fl
JULY A.IM.A.L.O.Q. Computing
LJlSK
7O0O
JSR
ALL
7970
LDA SFLAG ; test flag
\| MASTER
7010
7020
JSR
BMI
GET. TWO jgrab 2 More
H-ERR ;oops.
7980
7990
BNE SND.OU jno swap!
PRINT INS— SRC JprOMpt it
7030
LDA
HXL j nake this 8
8000
JSR GET-RET
7040
STA
FRO ;into hex for
8010 SND.OU LDY 81 ;signal good.
7050
SEC
joutput also.
8020
RTS
7060
SBC
ADDR ;Ue also calc
8030 ;
continued from base 43
7070
STA
BYTCNT ;the length of
8040 J
Test srcdrv vs. dstdrv
7080
LDA
HXH ;the segMent.
8050 ;
6120
BNE F.SEC ;no.
7090
STA
FR0 + 1
8060 TEST-DRU LDA DESDRU : qet dest
613G
LDA DSBUF+125 ;get the link
7100
SBC
ADDR+l
8070
CMP srcdrv ;is = source?
6140
AND 83 ;hi
7110
STA
BYTCNT+1
8080
RTS
jbye.
6150
STA SECH ;get the link
7120
INC
BYTCNT ;add 1 to the
8090 J
6160
LDA DSBUF+126 ;10
7130
BNE
N.OU ;segMent len.
8100 ;
Output error handler
6170
STA SECL ;at EOF?
7140
INC
BYTCNT+1
8110 ;
6180
ORA SECH
7150
N.OU
8120 0UT_ERR JSR F-ERR ; f orMat erp8
6190
BNE C.READ ;no.
7160
LDX
816 ;pos 16
8130
PRINT
OUTP jprint OUTPUT
62O0
5
EOF LDY t»136 jsignal error.
7170
JSR
ALL jcopy it
8140
LDX 8S20 ; close 82
6210
RTS
7180
JSR
PUTCR ;line feed
8150
JSR CLOSE
6220
C
READ JSR UP. READ ; grab sector
7190
PLA
jpull return
8160
PRINT
IBUF jprint err8
6230
PHP jsave status
7200
PLA
8170
PRINT
ALL.DONE+10
6240
LDA dsbuf+127 ;get » data
7210
JSR
PRINT.IT jprint it
8180
JSR GET-RET ;get return
6250
STA SECBYTES JbyteS.
7220
JMP
DISAMEM ;go again.
8190
JMP INTRO jso long.
6260
LDA DSBUF jget data byte
7238
/
8208 J
6270
PLP ;pull status
7240
;Grab two file bytes
8210 J
Get a RETUR
6280
RTS jand leave.
7250
i
8220 J
6290
I
7260
GET
.TWO
JSR CIOGET
8230 GET-RET JSR GETKEY ;get key
6300
F
SEC INC SECL jsec=sec+l
7270
BMI
G2ERR
8240
CMP 8E0L J is it EOL?
6310
BNE FS.l
7280
STA
HXL
8250
BNE GET_RET jno.
6320
INC SECH
7290
JSR
CIOGET
8260
LDX 8$20
6330
F!
.1 JSR UP. READ ;grab sector
7300
STA
HXH
8270
RTS
6340
PHP jsave status
7310
G2ERR
8280 ;
6350
LDA DSBUF jget data
7320
J
8290 J
iheck if
HXL/HXH=$FF
6360
PLP jpull status
7330
;Pr
int The output
8300 j
6370
RTS ;and leave.
7340
f
8318 CHKFF LDA
HXL j get byte 1
6380
1
7350
PRINT.IT PRINT IBUF ; to E:
8320
CMP 8$FF Jis it $FF?
6390
IJI
.READ LDA SECCNT ; any sectors
7360
LDY
80 ; wait 5 jiffies
8330
BNE CHKLU jno.
6400
ORA SECCNT+1 J left?
7370
STY
RTCLOK
8340
CMP HXH Jis 82=81?
6410
BEQ s.EOF ;no! Done.
7380
WT_
LP LDA RTCLOK
8350 CHKLU RTS
6420
LDA SECCNT ; subtract 1
7390
CMP
85
6430
6440
SEC ; f roH the sector
SBC mi ;count.
7400
7410
BCC
LDA
WT-LP
DSTFILE ;to E: only?
LISTING 5: ASSEMBLY
6450
STA SECCNT
7420
CMP
8'E
6460
LDA SECCNT+1
7430
BNE
PR. LP jno.
0100
SAUE8DJDMPT4.M65
6470
SBC M0
STA SECCNT+1
7440
7450
PR.
rts ;yes.
LP LDA IBUF,Y ; Move iObUf to
0110
0120
6480
DiSk Ma l:+or * napt A
6490
JMP READIT J read sector.
7460
STA
(BUFPNT), Y ;big buffer
0130
-» i... • r u. .. -»
6500
1
7470
CMP
8EOL
0140
These are the MneMonics for
6510
G_
.FILE LDA BYTCNT ; any bytes
7480
BEQ
PR.DN
0150
the disasseMhl pr . Thpu app
6520
ORA BYTCNT+1 J left?
7490
INY
0160
arranged
here in alphabetical
6530
BEQ HEADERS ;no, get nore
7500
BNE
PR. LP
0170
order .
6540
LDA BYTCNT jsubtract 1
SEC j f roM the count
7510
7520
PR.
DN INY ;now we add Y+l
TYA ;to the pointer
0180
0190
6550
6560
SBC ttl
7530
CLC
jso we are ready
0200 MNE .BYTE
"ADCANDASLBCCBCS"
6570
STA BYTCNT
7540
ADC
BUFPNT ;next tiMe
0210
.BYTE
"BEQBITBMIBNEBPL"
6580
LDA BYTCNT+1
7550
STA
BUFPNT
0220
.BYTE
"BRKBUCBUSCLCCLD"
6590
SBC MO
7560
LDA
BUFPNT+1
0230
.BYTE
"CLICLUCMPCPXCPY"
6600
STA BYTCNT+1
7570
ADC
80
0240
.BYTE
"DECDEXDEYEORINC"
6610
INC BYTES ;up byte count
7580
STA
BUFPNT+1
0250
.BYTE
"INXINYJMPJSRLDA"
6620
JMP CIOGET jget the byte
7590
INC
LINES
0260
.BYTE
"LDXLDYLSRNOPORA"
6630
/
7600
LDA
lines ;get line count
027O
.BYTE
"PHAPHPPLAPLPROL"
6640
;5end retraining instr bytes
7610
CMP
8200 ;200 lines?
0280
.BYTE
"R0RRTIRT5SBCSEC"
6650
i
7620
BNE
SND.LU jno.
0290
.BYTE
"SEDSEI5TASTX5TY"
6660
ANY_LEFT LDA BYTES jany extra?
7630
J
0300
.BYTE
"TAXTAYTSXTXATX5"
6670
BEQ N.LF jno.
7640
;Send the buffer out
0310
.BYTE
"TYA"
6680
LDY M151 jbad opcode.
7650
;
0320 J
6690
JSR HAUOP ; f ornat .BYTE
7660
SEND-OUT LDA LINES ;any lines?
0330 J
Opcodes
6700
JSR PRINT.IT jsend it out.
7670
BNE
SND. IT ;yes.
0340 ;
6710
LDA dtemp ; prepare next
7680
SND
■LU RTS ;so long.
0350 OPCODF
6720
STA OP
7690
SND
.IT LDA 811 jput bytes
0360
.BYTE
$69, $65, $75, $6D J ADC
6730
DEC BYTES jdown count
7700
LDX
8S20
0370
.BYTE
$7D,$79,$61,$71
6740
BNE ANY-LEFT ; and loop
7710
STA
ICC0M,X
0380
.BYTE
$29, $25, $35, $2D J AND
6750
N.
LF RTS ;bye.
7720
LDA
8 <BIGBUF J f tom bigbuf
0390
.BYTE
$3D, $39, $21, $31
6760
Il_
ERR JMP INERR j input error
7730
STA
ICBAL,X
0400
.BYTE
$06,$06,$16,$0E JASL
6770
I
7740
LDA
M >BIGBUF
0410
.BYTE
$1E
6780
;puil file headers
7750
STA
ICBAH,X
0420
.BYTE
$90 JBCC
6790
i
7760
LDA
BUFPNT ;calc the len
0430
.BYTE
$BO JBCS
6800
HEADERS JSR ANY_LEFT jsend extra
7770
SEC
jof the buffer
0440
.BYTE
$FO J BEQ
6810
JSR GET. TWO jgrab 2 More
7780
SBC
8 <BIGBUF
0450
.BYTE
$24,$2C JBIT
6820
BMI H-ERR ;oops.
7790
STA
ICBLL,X
0460
.BYTE
$30 J BMI
6830
LDY 829 jcopy Message
7800
LDA
BUFPNT+1
0470
.BYTE
$DO ;BNE
6840
C.
ST LDA STEN,Y ; to buffer
7810
SBC
8 >BIGBUF
0480
.BYTE
$10 JBPL
6850
STA IBUF,Y
7820
STA
ICBLH.X
0490
.BYTE
$00 JBRK
6860
DEY
7830
LDA
8 <BIGBUF ;reset the
0500
.BYTE
$50 JBUC
6870
BPL C.ST
7840
STA
BUFPNT ;pointers.
0510
.BYTE
$70 J BUS
6880
JSR CHKFF ;are they SFF's?
7850
STA
LINES
0520
.BYTE
$18 J CLC
6890
BNE NOT.FF ; no .
7860
LDA
8 >BIGBUF
0530
.BYTE
$D8 JCLD
6900
JSR GET. TWO ;get 2 More
7870
STA
BUFPNT+1
0540
.BYTE
$58 JCLI
6910
BMI H-ERR loops.
7880
JSR
TEST-DRU ;test drives
0550
.BYTE
$B8 JCLU
6920
NOT.
7890
BNE
SND. OUT jnot equal
0560
.BYTE
$C9,$C5,$D5,$CD J CMP
6930
STA ADDR J address and
7900
PRINT INS-DST ; ask for
0570
.BYTE
$DD,$D9,$C1,$D1
6940
STA FRO jconvert it to
7910
JSR
GET— RET ;disk swap.
0580
.BYTE
$E0,$E4,$EC JCPX
6950
LDA HXH jhex for the
7920
LDX
8$20
0590
.BYTE
$C0,$C4,$CC JCPY
6960
STA ADDR+1 joutput file.
7930
SND
.OUT
JSR CIOU jwrite out
0600
.BYTE
$C6,$D6,$CE,$DE J DEC
6970
STA FR0+1
7940
BMI
OUT-ERR joops.
0610
.BYTE
$CA JDEX
6980
JSR BIN2HEX juake hex.
7950
JSR
TEST-DRU j swap again?
continued on page 82
6990
LDX 84 jcopy it in
7960
BNE
SND.OU jno.
JULY A.M.A.L.O.S. Computing
UTILITY
M/L EDITOR
For use in machine-language entry.
by Clayton Walnum
M/L
Editor provides an easy
method to enter our
machine-language list-
ings. It won't allow you
to skip lines or enter bad
data. For convenience, you may enter listings
in multiple sittings. When you're through typ-
ing a listing with M/L Editor, you'll have a
complete, runnable object file on your disk.
There is one hitch: It's for disk users only.
My apologies to those with cassette systems.
Listing 1 is M/L Editor's BASIC listing.
Type it in and, when it's free of typos, save
a copy to disk, then run it.
On a first run, you'll be asked if you're
starting a new listing or continuing from a
previously saved point. Press S to start, or
C to continue.
You'll then be asked for a filename. If
you're starting a new listing, type in the file-
name you want to save the program under,
then press RETURN. If there's already a file
by that name on the disk, you'll be asked if
you wish to delete it. Press Y to delete the
file, or N to enter a new filename.
If you're continuing a file, type in the name
you gave the file when you started it. If the
program can't find the file, you'll get an er-
ror message and be prompted for another file-
name. Otherwise, M/L Editor will calculate
where you left off, then go on to the data en-
try screen.
Each machine-language program in
ANALOG Computing is represented by a list
of BASIC data statements. Every line contains
16 bytes, plus a checksum. Only the numbers
following the word DATA need to be con-
sidered.
M/L Editor will display, at the top of the
screen, the number of the line you're current-
ly working on. As you go through the line,
you'll be prompted for each entry. Simply
type the number and press Return. If you
press Return without a number, the default
is the last value entered.
This feature provides a quick way to type
in lines with repetitions of the same number.
As an added convenience, the editor will not
respond to the letter keys (except Q for
"quit"). You must either enter a number or
press Return.
When you finish a line, M/L Editor will
compare the entries' checksums with the
magazine's checksum. If they match, the
screen will clear, and you may go on to the
next line.
If the checksums don't match, you'll hear
a buzzing sound. The screen will turn red,
and the cursor will be placed back at the first
byte of data. Compare the magazine listing
byte by byte with your entries. If a number
is correct, press RETURN.
If you find an error, make the correction.
When all data is valid, the screen will return
to gray, and you'll be allowed to begin the
next line.
Make sure you leave your disk in the drive
while typing. The data is saved continuously.
You may stop at any time (except when you
have a red screen) by entering the letter Q for
byte 1. The file will be closed, and the pro-
gram will return you to BASIC. When you've
completed a file, exit M/L Editor in the same
way.
When you've finished typing a program,
the file you've created will be ready to run.
In most cases, it should be loaded from DOS
via the L option. Some programs may have
special loading instructions; be sure to check
the program's article.
If you want the program to run automati-
cally when you boot the disk, simply name
the file AUTORUN.SYS (make sure you have
DOS on the disk.).
The two-letter checksum code pre-
ceding the line numbers here is not
a part of the BASIC program. For
more information, see the "BASIC
Editor II" elsewhere in this issue.
LISTING 1: BASIC LISTING
AZ IB DIM BFC16),H$(4),A$(l),B5tl),F$tl5>
,F1S(15)
LF 11 DIM MODS (4 J
BK 29 LINE=ieeB:BETRN=lS5:BACK5P=126:CHK5
UM=B:EDIT=B
CO 39 GOSUB 458:P05ITIOH IB, 6:? "Btart or
Hontinue? "JIGOSUB SBBi? CHRS(A)
ZC 40 POSITION 10,8:? "FILENAME-J : INPUT F
$:P0KE 752,1:? " "
ft 58 IF LENCF$)<3 THEN POSITION 28,10:?
GOTO 48
*T 68 IF F$tl,210"D:" THEN F1S="D : " : FlS I
3)=F$:G0T0 88
Kt 78 F1$=F*
TH 88 IF CHRSCA)="5" THEN 128
FD 58 TRAP 430:0PEN «2, 4, 8, FlS : TRAP 118
HO 10B FOR X=l TO 16:GET tt2,A:NEXT XiLINE
=LINE+10:G0T0 108
HM 110 CLOSE H2:0PEN 02, 9, B, FlS : GOTO 178
UT 128 TRAP 168:0PEN U2,4,0,F1$:G05UB 448
:P05ITI0N 18,18:? "FILE ALREADY EXISTS
! !":POKE 752,9
ZU 130 POSITION 18,12:? "ERASE IT? "MG05
UB 500:P0KE 752,1:? CMRStA)
UH 148 IF CHRSCA)="N" OR CHRS(A)="n" THEN
CLOSE 1)2: GOTO 3B
CtC 158 IF CHRSCAXVY" AND CHRS(AX>"y" T
HEN 13B
■H 168 CLOSE H2:0PEN U2,8,9,FI$
IE 178 GOSUB 45B:P05ITI0N 10,1!? " l.'lii:Wil«
SUB: ";LINE:chksum=b
GH 180 L1=3:F0R X=l TO 16:P0SITI0N I3*CX<
10>*12*(X>9) ,X*2:P0KE 752,9:? "BYTE B"
;x;": "; :gosub 318
KH 190 IF EDIT AND L=B THEN BYTE=BF CX) : GO
TO 218
FY 208 byte=val:n$)
OZ 281 MOD$=NS
BU 210 POSITION 22.X+2:? BYTE;" "
YZ 228 BF(X)=BYTE:CHK5UM=CHK5UM*BYTE*X:IF
CHK5UM>9999 THEN CHK5UM=CHK5UM-10000
MS 230 NEXT X : CHK5UM=CHK0UM*LINE : IF CHK5U
M>9999 THEN CHK5UM=CI!K5UM-10009
IG 240 POSITION 12,X+2:P0KE 752,8:? "CHEC
K5UM: "; :L1=4:G05UB 319
EH 259 IF EDIT AND L=B THEN 278
OM 269 C=UAL(NS)
SY 279 POSITION 22,X*2:? C)" "
IL 280 IF C=CHK5UM THEN 308
M 290 GOSUB 440:EDIT=l:CHK5UM:0:G0T0 188
LM 300 FOR K=l TO 16:PUT 01, BF CX) : NEXT X:
LINE=LINE*19!EDIT=8:G0T0 178
FW 318 L=0
KZ 320 GOSUB 500:IF (A=A5CC"0") OR A=A5CC
"q")) AND X=l AND NOT EDIT THEN 420
PO 330 IF AORETRN AND AOBACK5P AND (A<4
8 OR A>57) THEN 328
BX 331 IF AzRETRN AND NSz"" THEN N$=M0D$
TD 335 IF A=RETRN AND L=8 AND X>1 THEN 35
8
JR 340 IF C(A=RETRN AND NOT EDIT) OR A=B
ACK5P) AND L=0 THEN 320
DH 350 IF A = RETRN THEN POKE 752,1:? R
ETURM
GG 368 IF AOBACK5P THEN 408
5A 378 IF L>1 THEN HS=NS CI, L"l) : GOTO 390
AS 389 NS=""
RE 399 ? CHRSCBACK5P) ; :L=L-1:G0T0 320
BB 400 L=L*1!IF L>L1 THEN A=RETRN:G0T0 35
MX 410 NSCL)=CHR4 (0) :? CHRS CA) ; : GOTO 320
KN 420 GRAPHICS OiENO
YT 430 GOSUB 440:P0SITI0N 10,10:? "NO 5UC
H file!":for x=i to iooo:next x:close
B2:G0T0 30
FD 440 POKE 71Q,48:S0UND 8 , 100 , 12 , 8 : FOR X
=1 TO 50INEXT X:S0UND 0, , , : RETURN
MY 450 GRAPHICS 23:P0KE 16,112:P0KE 53774
,112:P0KE 559,0:P0KE 710,4
XR 460 DL=PEEKC560>t256XPEEK(561>+4:P0KE
DL-1,70:P0KE DL+2,6
HH 470 FOR X=3 TO 39 STEP 2:P0KE DL+X,2:N
EXT X:F0R X = 4 TO 48 STEP 2:P0KE DL + X,8
ZM 480 POKE DL + 41,65'.P0KE DL + 42 , PEEK CS60)
:P0KE DL*43,PEEKC561> :P0KE 87,0
AC 490 POSITION 2,0:? "analog mi editor":
POKE 559,34:RETURN
HZ 500 OPEN U1,4,8,"K:":GET H1,A:CLB5E Bl
:RETURH jm
64
JULY A.IM.A.L.O.Q. Computing
continued from page 25
« 4
5830 5H0H1 CMP JIFFY
5840 BEQ SH0H1
5850 STX BANKSEL
5860 LDX 8PAGE3
5870 LDA JIFFY
5880 SH0H2 CMP JIFFY
5890 BEQ SHOHZ
5900 STX BANKSEL
5910 LDX CH
5920 CPX tt255
5930 BEQ SHOHALF
5940 LDX ttMAIN
5950 STX BANKSEL
5960 JMP HOLDNOM
5970 * CSJhow half, pages 2
5980 SHOSECHAF LDX UPAGE2
5990 LDA JIFFY
6000 5H0S1 CMP JIFFY
6010 BEQ SH0S1
6020 STX BANKSEL
6030 LDX 8PAGE4
6040 LDA JIFFY
6050 SH0S2 CMP JIFFY
6060 BEQ SH0S2
6070 STX BANKSEL
6080 LDX CH
6090 CPX 8255
6100 BEQ 5H05ECHAF
6110 LDX ttMAIN
6120 STX BANKSEL
6130 JMP HOLDNOM
6140 * Show all screens (F)astest
6150 FASTEST LDA «255
6160 FASTEST1 LDX ttPAGEl
6170 STX BANKSEL
6180 LDX »PAGE2
6190 STX BANKSEL
6200 LDX BPAGE3
6210 STX BANKSEL
6220 LDX KPAGE4
6230 STX BANKSEL
6240 CMP CH
6250 BEQ FA5TE5T1
6260 LDX ttMAIN
6270 STX BANKSEL
6280 JMP HOLDNOM
6290 *= $02EO
6300 .WORD INIZ
LISTING 3: ASSEMBLY
jSAVEttD:SYSEQU.M65
10
.PAGE "OSS
SYSTEM EQUATES FOR
ATARI"
20 ;
30 ;
FILE = ttDN:SYSEQU. ASM
40 j
50 ;
60 ;
I/O CONTROL BLOCK
70 J
80 SAUEPC = *
r
; SAVE CURRENT OR
b
90 ;
0100
*- $0340
;START OF SY5TEM
IOCBS
0110
IOCB
0120
1
0130
ICHID *= *+l
J DEVICE HANDLER I
S CSET BY OS)
0140
ICDNO *= *+i
; DEVICE NUMBER CS
ET BY OS)
0150
ICCOM *= *+l
;I/0 COMMAND
0160
ICSTA *= *+i
Jl/O STATUS
0170
ICBADR *= *+2
JBUFFER ADDRESS
0180
ICPUT *= *+2
;DH PUT ROUTINE (
ADR-1)
0190
ICBLEN *= »+2
; BUFFER LENGTH
0200
ICAUX1 *- *+l
; AUX 1
0210
ICAUX2 *= *+l
;AUX 2
0220
ICAUX3 *- *+i
;AUX 3
0230
ICAUX4 *- *+l
;AUX 4
0240
ICAUX5 *= *+l
JAUX 5
0250
ICAUX6 *= *+l
;AUX 6
0260
I
0270
IOCBLEN = *-IOCB ; LENGTH OF ONE I
OCB
0280
J
0290
; IOCB COMMAND
VALUE EQUATES
0300
J
0310
COPN = 3
J OPEN
0320
D
CGBINR = 7
;GET BINARY RECOR
ItBM
s
tiv^V7\
1 0330 CGTXTR = 5
JGET TEXT RECORD
0340 CPBINR = 11
D
JPUT BINARY RECOR
0350 CPTXTR = 9
;PUT TEXT RECORD
0360 CCLOSE = 12
JCLOSE
0370 C5TAT = 13
;get status
0380 ;
0390 J DEVICE DEPENDENT COMMAND EQUATE
S FOR FILE MANAGER
0400 ;
0410 CREN - 32
; RENAME
0420 CERA = 33
;ERA5E
0430 CPRO = 35
; PROTECT
0440 CUNP = 36
JUNPROTECT
0450 CPOINT = 37
; POINT
0460 CNOTE = 38
;NOTE
0470 J
0480 J AUX1 VALUES REQD FOR OPEN
0490 ;
050O OPIN = 4
JOPEN INPUT
0510 OPOUT = 8
JOPEN OUTPUT
0520 OPUPD = 12
;OPEN UPDATE
0530 OPAPND = 9
JOPEN APPEND
0540 OPDIR = 6
JOPEN DIRECTORY
0550 ;
0560 .PAGE
0570 J
0580 ; EXECUTE FLAG DEFINES
0590 ;
0600 EXCYES = $80
J EXECUTE IN PROG
RESS
0610 EXCSCR = $40
J ECHO EXCUTE INP
UT TO SCREEN
0620 EXCNEM = $10
EXECUTE START U
P MODE
0630 EXCSUP = $20
COLD START EXEC
FLAG
0640 j
0650 : MI5C ADDRESS EQUATES
0660 j
0670 CPALOC = $0A
POINTER TO CP/A
0680 MARMST = $08
MAR, START (0=:C
OLD)
0690 MEMLO = $02E7
AVAIL MEM (LOM)
PTR
0700 MEMTOP = $02E5
AVAIL MEM (HIGH
) PTR
0710 APPMHI - $0E
UPPER LIMIT OF
APPLICATION MEMORY
0720 INITADR = $02E2
ATARI LOAD/INIT
ADR
0730 GOADR = $02E0
ATARI LOAD/GO A
DR
0740 CARTLOC = $BFFA
CARTRIDGE RUN L
OCATION
0750 CIO = $E456
CIO ENTRY ADR
0760 EOL = $9B
R
0770 ;
END OF LINE CHA
0780 J CP/A FUNCTION
AND VALUE DISPLA
CEMSNT
0790 ; (INDIRECT THROUGH CPALOC)
0808 ; IE.
XPALOC) , Y
0810 j
0820 CPGNFN = 3 J
GET NEXT FILE N
A ME
0830 CPDFDV = $07 ,
DEFAULT DRIVE (
3 BYTES)
0840 CPBUFP = $0A ,
CMD BUFF NEXT C
HAR POINTR CI BYTE)
0850 CPEXFL = $0B t
EXECUTE FLAG
0860 CPEXFN = $0C j
EXECUTE FILE NA
ME (16 BYTES)
0870 CPEXNP = $1C ,
EXECUTE NOTE/PO
INT VALUES
0880 CPFNAM = $21 ,
FILENAME BUFFER
0890 RUNLOC = $3D
CP/A LOAD/RUN A
DR
0900 CPCMDB = $3F ,
COMMAND BUFFER
{60 BYTES)
0910 CPCMDGO = $F3
0920 ;
0930 *= SAVEPC ,
RESTORE PC
0940 ;
0950 RANDOM = 53770
0960 5AVM5C = $58
0978 CONSOL = 53279
0980 COLOR0 = 708
0990 CRSINH = 752
1000 BOOT? = 9
1010 DINDEX = 87
1020 HATABS - 794
1030 CH = 764
1040 5TRIG0 = 644
1050 STICKO = 632
1060 POKMSK = $10
continued on page 69
JULY A.IM.A.L.O.Q. Computing
B&C .
ComputerVisions
3257 KIFER ROAD
SANTA CLARA, CA 95051
(408)749-1003
(408) 749-9389 FAX
A
STORE HOURS
TUE- FRI 10am - 6pm
SAT - 10am - 5pm
CLOSFD SUN - MON
soo/ x i^/ x n: s o F"r w \a r re
ALL TITLES ON DISK
AWARDWARE (1050) 1.1.50
efe,
tioo/ x jl/ x E sc?r*rws\
ALL TITLES ON CARTRIDGE
k re
ENTERTAINMENT
12 ADAMS ADVENTURES .. 14.95
ALIANTS 26.95
ALT. REALITY CITY 26
ALT. REALITY DUNGEON. 26
BEYOND CASTLE WOLF. ... 14
DI. SHARK 26
95
95
95
95
95
95
95
9 5
95
DOP k WRESTLE 26
UORDINO:1812 26
13O0LDERDASH CONSTR.SET 17
DRUCE LEE 17
CASTLE WOLFENSTETN. ... 14
DALLAS QUEST 7.95
n-BIIC. 7.95
P-15 STRIKE EAGLE .... 31.50
EIGHT NIGHT 17 . 95
GAUNTLET (64K) 31.50
DEEPER DUNGEONS 22.50
GUNSLINGER 26.95
HARD HAT MAC 7.95
JAWBREAKER 9.95
KARATEKA 13 . 50
KN1CKERUOCKERS 13 . 5U
KORONIS RIFT 13 . 50
LAST V - 8 8.95
LEADERBOARD 13.50
MAIL ORDER MONSTERS .. 13.50
MICROLEAGUE BASEBALL.. 35.95
MONTEZUMA'S REVENGE... 14.95
MOUSEQUEST 17 . 95
MOON SHUTTLE 7.95
N1NJA 8.95
OTL'S WELL 9.95
O'KILEY'S MINE 9.95
PIRATES OF BARB. COAST 22.50
PREPPIE I £ II 9.95
RESCUE ON FRACTAL AS... 13.50
SILENT SERVICE 31 . 50
SPEEDK1NG 8.95
SP1DERMAN 5.35
SPITFIRE 40 31 . 50
STARFLEET I 44 .95
SPY VS. SPY III 17.95
STOCKHARKET 22.50
STRIP POKER 26.95
SUMMER GAMES 17 .95
TAX DODGE 9.9 5
THE HULK 5.35
TOMAHAWK ( 64K ) 26.95
TOP GUNNER 17 .95
TOUCHDOWN FOOTBALL ... 13.50
TRATLBLAZF.R 26.9 5
UNIVERSE 44 .95
ZAXXON (4 00/800) 13.50
PROGRAMMING
ACTION! 71.95
ACTION! TOOLKIT 26 .95
DAS1C XL 53.95
BASIC XL TOOLKIT' 26.95
BASIC XE 71.95
DOS 2.5 7.95
DOS XE 10.00
DISK I/O 26.95
KYAN PASCAL 62.95
L1GHTSPEED C 35.95
LOGO 19 .95
MAC/65 71.95
MAC/65 TOOLKIT 26.95
MACRO ASSEMBLER 22 . 50
PTLOT 19.95
SPARTA DOS X 71.95
PRODUCTIVITY
ANIMATION STATION .... 89.9 5
ATARIKRITER 29.95
ATARIWRITER (CART ONLY)19.95
ATAKIWRITER+ 39.95
ATARI BOOKKEEPER 24.95
ATARI MUSIC II 14.95
BANK STREET WRITER.... 14.95
BLAZING PADDLES 31 . 50
CELEBRITY COOKBOOK ... 26.95
COMPOTE YOUR ROOTS ... 3 5.95
DATAMANAGER 1.7 . 9 5
FAMILY FINANCE 6.95
GUITAR WIZARD 26.95
HOME ACCOUNTANT 19.95
HOME FILING MANAGER. . 6.9 5
HOMEPAK 24.95
INVENTORY MASTER 80.95
LETTER WIZARD 29.95
MUSIC CONSTRUCTION SET 13.50
NEWSROOM (1050 - 64K). 44.95
NEWS STATION 26.9 5
NEWS STA. COMPANION. . 26.95
PAGE DESIGNER 26.95
PRINT POWER (1050).... 13.50
PRINTKIT (1050) 13.50
PRINTSHOP 34.95
P.S. COMPANION (61K) . 24.95
I'. S. GRAPHICS LIBRARY 1 17.95
P.S. GRAPHICS LIBRARY 2 17.95
P.S. GRAPHICS LIBRARY 3 17.95
PROOF READER 17.95
PUBLISHING PRO 35.95
ROBBER STAMP 26.95
SYNTREND (130XE) 35.95
SUPER MAILER 35.95
THE LOTTO PROGRAM .... 17.9 5
TIHEWISE 6.9 5
TURBOWORD/80 COLUMN
REQUIRES XEP80 44.95
VIDEO T1TLESHOP (64K). 26.95
GRAPHICS COMPANION. 17.95
VIRTUOSO 29.9 5
V1S1CALC 24.95
EDUCATION
ATARI LIGHT MODULE
(REQ. STARTER SET) . 9.9 5
BUZZWORD 35.95
GRANDMA'S HOUSE (-10) 9.95
HEY DIDDLE (AGE 3-10). 9.95
MASTER TYPE 14 .95
STATES AND CAPITALS .. 9.9 5
TOUCH TYPING 9.95
CBS (AGE 3-6) :
ASTROGROVER 8.95
BIG BIRD SPEC DELIVE 8.9 5
ERNIE'S MAGIC SHAPE. 8.95
DESIGNWAEE:
MATHMAZE (6-11) .... 35.95
MISSION ALGEBRA (13+)35.95
SPELLICOPTER (6-11). 3 5.95
TINK TONK (AGE 4-6) :
ABC'S 8.9 5
CO0NT AND ADD 8.9 5
SMART THINKER 8.9 5
SPELLING 8.95
SUBTRACTION 8.95
THINKING SKILLS .... 8.9 5
ALL 6 TINK TONKS.. 39.95
UNICORN!
10 LITTLE ROBOTS
(PRE-SCHOOL) 26.95
FUN BUNCH (6-ADULT) 26.95
RACECAR RITHHETIC
(AGE 6+ ) 2 6.95
WEEKLY READER (PRE-SCHOOL):
STICKY BEAR SHAPES . 26.95
STICKY BEAR NUMBERS. 26.95
STICKY BEAR ABC'S .. 26.96
STICKY BEAR OPPOSITE 26.9 5
SB BASKET BOUNCE ... 26.9 5
STICKY BEAR BOP .... 26.95
RUN FOR IT 26.95
PIC BUILDER 26.95
ENTERTAINMENT
3D TIC-TAC-TOE 9 .
AIRBALL (XL/XE) 24 .
ALIEN AMBUSH 9.
ACE OF ACES .(XL/XE) . 24.
ARCHON 19.
ASTEROIDS 15 .
ASTRO CHASE 14 .
ATARI TENNIS 9 .
ATLANTIS 14.
BALL BLAZER 19.
BARNYARD BLASTER
(REQ. LIGHT GUN) ... 24 .
HATTLEZONE 19.
B.C. QUEST FOR TIRES 19
BLUE MAX 19 ,
BOULDERS S, BOMBS .... 14.
CAVERNS OF MARS 14,
CENTIPEDE 14 .
CHICKEN 9 .
CHOPLIFTER 14
CLAIM JUMPER (400/800) 9
CLOUDBURST 9
CRIME BUSTER
(REQ. LIGHT GUN) . . 24
CROSSBOW 24
CROSSFIRE 9
CRYSTAL CASTLES (XL/XE) 19
DARK CHAMBERS (XL/XE). 24
DAVIDS MIDNIGHT MAGIC 19
DEFENDER 14
DELUXE INVADERS 7
DESERT FALCON 19
DIG DUG 19
DONKEY KONG 5
DONKEY KONG JR 19
EASTERN FRONT (1941), 19
E.T. PHONE HOME 9
FIGHT NIGHT 19
FINAL LEGACY 19
FOOD FIGHT (XL/XE)... 19
FOOTBALL 14
FROGGER 14
GALAXIAN 9
GATO 24
CORF (400/800) 5
GYRUSS 14
HARDBALL 19
INTO THE EAGLES NEST 19
JOURNEY TO PLANETS . . 9
JOUST 19
JUNGLE HUNT 19
KABOOMI 14
KARATEKA 19
KRAZY ANTICS 14
95
95
9 5
95
95
9 5
9 5
9 5
95
95
9 5
95
95
95
95
95
95
9 5
95
95
95
9 5
95
95
95
95
95
9 5
95
00
9 5
95
95
95
95
95
9 5
95
95
9 5
00
95
95
95
95
9 5
95
9 5
9 5
95
LODE RUNNER
MARIO BROS
MEGAMAN1A
MILLIPEDE
MISSILE COMMAND . . .
MOON PATROL
MR. COOI
MS . PAC MAN
NECROMANCER
ONE ON ONE (XL/XE) .
PAC MAN
PENGO
POLE POSITION
POPEYE
Q-BERT
QIX
RESCUE ON FRACTALAS .
RETURN OF THE JED1 . .
ROBOTRON:2084
SKY WRITER
SLIME (400/800)
SPACE INVADERS
STAR RAIDERS
STAR RAIDERS II
SUBMARINEE COMMANDER
SUHHER GAMES (XL/XE).
SUPER BREAKOUT
SUPER COBRA
THUNDERFOX
TRACK k FIELD
TURMOIL
WIZARD OF WOR
PRODUCTIVE!'
24.
19.
9.
14,
19.
9
19
19.
19.
19.
19.
14
14
14,
19
14
19
14
95
95
9 5
(HI
95
95
95
9 5
9 5
(III
9 5
95
95
.95
.00
ATARIWRITER
MK'ROFILER .
EDUCATION
ATARI LAB STARTER SET . 29.
FUN WITH ART 14 .
MATH ENCOUNTERS 9 .
FISHER PRICE (PRE SCHOOL)
DANCE FANTASY 8.95
LINKING LOGIC 8. 9 5
LOGIC LEVELS 8.95
MEMORY MANOR 8 . 95
SPINNAKER (AGE 3-10):
ALP IN COLOR CAVES . 9.95
ALPHABET ZOO 9.95
DELTA DRAWING 9.95
PACEMAKER 9 . 95
KIDS ON KEYS 9.95
KINDERCOMP 9.95
(AGE 7 - ADULT) :
ADV. CREATOR ( 4 00/800 ) . 9 . 95
FRACTION FEVER 9.95
I
.S ZJF*ER S F»EC Z^± E S
RECONDITIONED ATARI MERCHANDISE
30 DAY WARRANTY
III
800 (4SK)
COMPUTER
$79.95
400 (16K)
COMPUTER
$29.95
1020 COLOR
PRINTER/PLOTTER
$19.95
40 COLUMNS WIDE
(new in box)
SPACE ACE
JOYSTICK
$5.00.
ATARI
TRACKBALL
$9.95
ATARI
BOOKKEEPER
$14.95 - NO BOX
ATARI
NUMERIC
KEYPAD $7.95
1030 MODEM
WITH EXPRESS!
$24.95
1010 PROGRAM
RECORDER
$29.95
DISKETTES
AS LOW AS 20 CENTS
lOrOR S4.00
100 FOR $29.95
1000 FOR $200
MOST ARE UNNOTCIIED
WITH OI.DSOFTWARI:
SHIPPING INFORMATION • Prices do nol include shipping and handling. Add S5.00 for small items ($8.00 Min. lor Canada). Add SS.00 lor disk drive. Add S2.75 for CO. I).
Calif, res. include 7 l r sales (ax . Mastercard and Visa accepted if your telephone is listed in your local phone directory. Orders may be pre-paid with money order, cashier
check, or personal check. Personal checks are held for three weeks before order is processed. C.O.D orders are shipped via UP.S and inusl be paid with cash, cashier check or
money order. Int eruat ioual and APO orders must be pre-paid with cashier check or money order. $20.00 minimum, on all orders. All sales are final - no refunds • prices are
subject to change.
Phone orders accepted TUESDAY THROUGH FRIDAY from 10:00 am to 6:00 pm PST.
We carry a full line of ATARI products - large public domain library - write or call for free catalogue
PRICES SUBJECT TO CHANGE WITHOUT NOTICE - ALL SALES ARE FINAL
CIRCLE #110 ON READER SERVICE CARD.
#
#
CRYSTAL CASTLES
Atari Corp.
1 1 96 Borregas Avenue
Sunnyvale, CA 94086
(408) 745-2000
Cartridge $29.95
Reviewed by Matthew J.W. Ratcliff
Crystal Castles is a challenging 3-D maze
game that provides a lot of entertaining play-
time for the novice and expert. The scenario
is similar to the classic Pac-Man, but with
a three-dimensional twist that adds a lot of
depth to the game.
Bentley Bear must navigate, with the as-
sistance of a joystick, an endless maze of al-
leys, stairways and elevators. These castles
are viewed from a two-thirds overhead view,
similar to the playfield of Zaxxon or Desert
Falcon. However, the scenes in Crystal Cas-
tles are mazes that do not scroll. Each dis-
play is a unique image. Bentley can run and
jump, picking up diamonds, rubies and pearls
for points along the way.
Of course, there are the usual bad guys to
overcome. Bentley must avoid the Crystal
Balls, Nasty Trees, Gem Eaters, Swarms of
Bees, Ghosts, Skeletons and the wicked
Witch Berthilda. Most of the foes seem fair-
ly passive. Evading the bees and Berthilda
can be quite difficult, however. This certainly
makes for a more sophisticated game than the
relentless "ghosts" in Pac-Man. On some
JULY A.IM.A.L.O.G. Computing
screens Bentley can pick up a magic hat,
making him invincible for a short period of
time. It allows Bentley to make short work
of the remaining gems on a nearly complet-
ed screen.
The graphics in Crystal Castles are well
done, but the sound effects are not terribly
sophisticated.
The player moves the joystick north, south,
east and west to control Bentley Bear. The
bear moves diagonally on the screen in
response to these controls, since the mazes
are oriented in this manner. It takes a bit of
practice to get accustomed to this control, but
is not difficult to master.
There are ten levels to this game, with four
castles in each, except the last. On the tenth
level there is only one castle to conquer. The
game ends when Bentley loses all his lives,
or picks up the last gem on the final level.
This game can actually be completed by
playing through all ten levels. But, with 37
different castles to overcome, it will take
some serious playtime.
When the lower levels of Crystal Castles
have been mastered, the player need not
replay them over and over again. Unlike Pac-
Man, where the user may select a starting lev-
el, Crystal Castles allows the player to use
secret warps. This adds an element of mys-
tery and surprise to the game. If Bentley
makes just the right jump, at just the right
location, he can warp to a higher level in the
game. This warp earns the player extra lives
and bonus points. Sometimes the magic hat
is required to complete this maneuver. This
eliminates the frustration of having to replay
screens you already know by heart.
Crystal Castles is not a difficult game to
play. My four- year-old son can play through
the first two game screens. However, at
higher levels the playscreens become increas-
ingly more complicated. More stairways, ele-
vators and tunnels make the going tough.
Crystal Castles meets the needs of seasoned
arcade-game players, while allowing the com-
plete novice the opportunity to make good
progress in the game as well. This is a new
generation of Pac-Man, with plenty of enter-
taining challenges for all levels of game play. I
67
KEVS 00
anno §1
HITS 03
W
Reviewed by Matthew J.W. Ratcliff
Into the Eagle's Nest is the finest game
released by Atari in years. It provides some
of the most exquisite graphics, superior sound
effects and impressive playability on a game
cartridge now available for the Atari 8-bit
computers.
The setting is a World War II Nazi fortress
called the Eagle's Nest. Three allied soldiers
have preceded you, placing explosives on all
four floors of the castle. Each level is huge
and will take quite some time to conquer.
Your allies have been captured and taken
prisoner. At the outset, one of three rescue
missions may be selected. The fourth and fi-
nal objective is to blow up the castle.
This game is played from an overhead
view. The main character, dressed in green
battle fatigues, is controlled with a joystick.
He can be moved in four basic directions. The
screen scrolls smoothly as he battles his way
through the rooms. He can be maneuvered
to pick up keys to orange locked doors. The
gray doors can be shot open. Each room and
corridor presents more Nazis, dressed in drab
gray, that must be shot twice to be obliterated.
The player accumulates "hit points" as he
is shot at by the opposing soldiers. The player
is dead after 50 hits and the game ends. Cold
food may be found in some of the rooms.
Moving over the food, the solder will eat it
and "heal" some of his hit points. Some-
times, a first aid kit can be found to eliminate
all current hits.
Only 99 rounds of ordnance can be carried
at a time, but there is plenty of that to be
found. Should the player run out of ammo,
it is wise to pick up more quickly— there are
always more Nazis around the next corner.
The player shoots from his right shoulder, so
he can "hide" part of himself behind walls
or other obstacles, while shooting the ene-
mies. This technique is crucial to making any
real progress in this challenging game.
The player may also accumulate pendants
and jewels— artifacts stolen by the Nazis—
for more points. In many rooms closed chests
are found. The player may shoot them open
and find more treasures or explosives. Shoot-
ing into an open chest filled with explosives
is always fatal. Generally, it is unwise to use
valuable time and ammunition to shoot chests
in hopes of accumulating more treasures,
since these are not essential to winning the
game.
The player must locate and activate the
detonator by shooting it, to safely blast each
level of the fortress, in the fourth scenario.
Besides shooting doors and Nazi soldiers, the
player may also shoot his way past boulders
that block some rooms. Elevator passes are
required to use the lifts to move on to a differ-
ent floor of the castle.
In the rescue missions, the player must lo-
cate one of the captured prisoners and escort
him to the safety of the storage room, where
the game begins. The rescued prisoner is
somewhat dazed by all the commotion and
does not always cooperate. A shot in his
general direction usually brings him to his
senses and gets him back in gear. From the
documentation it is apparent that the castle
must be destroyed after the prisoner is res-
cued, but I haven't been able to make it this
far through the game yet.
This is a superb action/graphics adventure
game. It is extremely challenging, but not to
the point of total frustration. It is one of the
few games that can actually be played to com-
pletion. The four different scenarios will keep
INTO THE
EAGLE'S NEST
Atari Corp.
1 196 Borregas Avenue
Sunnyvale, CA 94086
(408) 745-2000
Cartridge $29.95
the game play interesting for a long time to
come. It is nice to have the fourth mission,
in which the goal is to simply blow up the
castle. This allows one to finish the game
without the added complexities of locating a
prisoner and keeping him in tow throughout
the game.
Into the Eagle's Nest is similar to Gaunt-
let, from Mindscape. Gauntlet presents the
player with many different enemies and mul-
tiple ways to eliminate them. Eagle's Nest
provides only one enemy and only one
method of elimination. I don't find this a flaw
however, since Eagle's Nest plays faster, and
it is easier to master the game's controls. This
allows the player to concentrate more on the
adventure than the mechanics of manipulat-
ing the main character.
Into the Eagle's Nest has one particularly
annoying "feature." At the end of each game,
where a high score is achieved, the user is
allowed to enter his name from joystick con-
trols. This requires ten joystick-button press-
es, plus several more to start the next game.
The names are not stored to disk, nor are they
saved in battery-backed cartridge RAM, simi-
lar to The Legend ofZelda for the Nintendo
Entertainment System. Therefore, this feature
is of no use unless you leave your computer
on for long periods of time or have a lot of
game tournaments with friends. At the name
entry screen, the Start key should send con-
trol directly to the next game; it doesn't.
Into the Eagle's Nest is a refreshing new
offering that marks the beginning of the new
gaming age from Atari. I think we can ex-
pect more original titles with top-notch
graphics, sound and playability in the near
future. Into the Eagle's Nest is a stellar game,
one that I have found highly addictive, fl
JULY A.M.A.L.O.Q. Computing
continued from page 65
1070 RAMTOP = $6A
1080
SDMCTL = S022F
1090
STOCK = $0100
HOB
*
1110
IRQEM = $D20E
1120
NMIEN = SD40E
1130
5KCTL = $D2QF
1140
DMACTL = $D400
1150
KBCODE = $D209
1160
POTGO = SD2QB
1170
AUDCTL = $D208
1180
AUDF3 - $D204
1190
AUDC3 - $D205
1200
PACTL = $D302
1210
PORTA = SD30O
1220
PORTB = $1)301
1230
*
1240
* Tiner counter:
1250
JIFFY = 20 ; 60HZ Clock
1260
FILENAME = $0400 ; cassette buffe
r at
$400
1270
; will be used as FILENAME buffer
for
1280
; file i/o oriented operations.
1290
DLI5T = $0230 ; display list po
inter
OSE FILE 86
0140 ;WE IGNORE ANY ERRORS FROM THE CL
L/ST/Nfi 4: ASSEMBLY
6 J5AUE8D: GRAPHICS. M65
10 ;
GRAPHICS g
ENTRY: A-REG CONTAINS GRAPHICS MO
EXIT: Y-REG HAS COMPLETION STATU
20
30
40
DE
50
S
60 ;
70 SNAME .BYTE "5:",155,e
80 GRAFIX
90 PHA ;SAUE 'G-
0100 LDX 86*$10 ;FILE 6
0110 LDA 8CCL05E
0120 STA ICCOM.X
0130 JSR CIO J FIRST ME MUST CL
OSE
0150 ;
0160
0170
S FILE
0180
0190
0200
NAME "Si"
0210
LDX 86*$18
LDA HCOPN
; AGAIN, FILE 6
;HE MILL OPEN THI
STA ICCOM,X
LDA 8 <SNAME
STA ICBADR.X ; ME USE THE FILE
LDA 8 >SNAME
STA ICBADR+1,X ;BY POINTING A
0220
T IT
0230 ;
0240 ;ALL IS SET UP FOR OPEN, NOW
0250 ;ME TELL CIO t& 5:> MHAT KIND OF
OPEN
0260 ;
0270 PLA
APHICS MODE
0280 STA ICAUX2,X {IS GIVEN TO 'Si
■
0290 ; CNOTE THAT S: IGNORES UPPER BIT
;OUR SAVED ' G' GR
5 OF AUX23
0300
PPER BITS
031O
0320
RTED
0330
0340
AND 8$F0
EOR 8510
JNOM ME GET THE U
;AND FLIP BIT 4
CS: EXPECTS THIS BIT TO BE INVE
;FR0M MHAT NORMAL BASIC USAGE IS)
ORA 8$0C ;ALLOM READ & MRI
TE ACCESS FOR CIO
0350 STA ICAUX1,X ; FOR CIO AND Si
0360 JSR CIO JOPEN Si
0370 RT5 :GRAPHICS MODE 'G
■ NOM OPEN
0388
.MACRO GRAPHICS
0390
.IF y.OOi.
0400
.ERROR "GRAPHICS LEN
0410
■ENDIF
0420
.IF Xl>255
0430
LDA XI
0440
.ELSE
0450
LDA 8X1
0460
.ENDIF
0470
JSR GRAFIX
0480
.ENDM
FOR OUR DISK
SUBSCRIBERS
The following programs from this
issue are on disk:
THE ANALOG #74 DISKETTE COW]
MAGAZINE FILES. THEY ARE I,:
FILENAME. EXT LANG. LOAD ARTICLE NAME
DISKMABT
OBJ
ML
(#3)
DISK MASTER
C5ETDISP
OBJ
ML
(#3)
CHARACTER SET DISPLAY
AUTOMAKE
HAS
BASIC
LOAD
AUTORUN.SYS IN BASIC
CHAOS
BAS
BASIC
LOAD
CHAOS
DEGASVUF
OBJ
ML
(#3)
DEGAS VIEW
DEGAS'/UF
OBJ
MAC/65
LOAD
DEGAS VIEW SOURCE
GRAPHICS
M65
MAC/65
LOAD
DEGAS VIEW SOURCE
SySEQU
M6S
MAC/65
LOAD
DEGAS VIEW SOURCE
I OMAC
LIB
MAC/65
LOAD
DEGAS VIEW SOURCE
MAZERUNR
OBJ
MI,
(#3)
MAZER UNNER
MAZERUNR
M65
MAC/65
LOAD
MAZERUNNER SOURCE
MLEDITOR
BAS
BASIC
LOAD
M/L EDITOR
LST
BASIC
ENTER
BASIC EDITOR II
SIDE 2:
FILENAME
EXT
LANG.
MAC/65
LOAD
LOAD
ARTICLE NAME
DMPT1
M6S
DISK MASTER SOURCE
DMPT2
M65
MAC/65
LOAD
DISK MASTER SOURCE
DMPT3
M65
MAC/65
LOAD
DISK MASTER SOURCE
DMPT4
M65
MAC/65
LOAD
DISK MASTER SOURCE
DMPT5
M6S
MAC/65
LOAD
DISK MASTER SOURCE
SVSEQU
M65
MAC/6 5
LOAD
DISK MASTER SOURCE
CSETDISP
ACT
ACTION!
(11)
CHAR. SET DISP. SOURCE
CSET2
ACT
ACTION!
(#1)
"CHAR. SET DISP. SOURCE
TO LOAD YOUR ANALOG DISK
1) INSERT BASIC CARTRIDGE (NOT REQUIRED FOR XE
OR XL COMPUTERS ) .
2) TURN ON DISK DRIVE AND MONITOR.
3) INSERT DISK IN DRIVE.
4) TURN ON COMPUTER. (XL AND XE OWNERS: DO NOT
HOLD DOWN OPTION KEY ! )
WARNING: BEFORE YOU RUN A PROGRAM. READ THE
APPROPRIATE ARTICLE IN THE MAGAZINE.
FAILURE TO DO SO MAY YIELD CONFUSING
RESULTS.
NOTE: ONLY PROGRAMS WITH THE .BAS 08 .OBJ
EXTENSION MAY BE RUN FROM THE MENU.
OTHER PROGRAMS SHOULD BE LOADED AS
INSTRUCTED IN THE LOADING NOTES AND
MAY REQUIRE ADDITIONAL SOFTWARE AS
LISTED BELOW. HOWEVER. YOU SHOULD
NOT ASSUME THAT EVERY FILE WITH
THE PROPER FILE EXTENSION WILL RUN
FROM THE MENU. YOU MAY HAVE TO MOVE
CERTAIN PROGRAMS TO A DIFFERENT DI3K
TO OBTAIN CORRECT RESULTS.
EXT DESCRIPTION
.M6S REQUIRES THE MAC/65 ASSEMBLER
.AMA REQUIRES THE ATARI MACRO ASSEMBLER
.ASM REQUIRES THE ATARI ASSEMBLER/EDITOR
.ACT REQUIRES THE ACTION! CARTRIDGE
.LGO REQUIRES THE ATARI LOGO CARTRIDGE
.SYN REQUIRES THE SYNAPSE SYN ASSEMBLER
LOADING NOTES
LOAD BASIC PROGRAM:
ENTER BASIC PROGRAM:
LOAD MAC/65 PROGRAM:
ENTER ASM/ED PROGRAM:
LOAD LOGO PROGRAM:
LOAD SYN/AS PROGRAM:
LOAD "D: FILENAME. EXT"
ENTER "D:FILENAME.EXT"
LOAD «D:FILENAME.EXT
ENTER »D:FILENAHE.EXT
LOAD "D: FILENAME. EXT"
LOAD "D:FILENAME.EXT"
II: SEE ACTION! MANUAL.
#2: SEE ATARI MACRO ASSEMBLER MANUAL.
#3: MAY ALSO BE LOADED FROM DOS USING THE "I."
OPTION OF THE DOS MENU.
II: THIS FILE SHOULD BE TRANSFERRED TO ANOTHER
DISK AND RENAMED "AUTORUN. SYS" .
15: READ THE APPROPRIATE ARTICLE FOR INSTRUCTIONS
ON USING THIS FILE.
JULY A.N.A.L.O.Q. Computing
BASIC
Editor E
by Clayton Walnum
BASIC Editor II is a utility to help you
enter BASIC program listings pub-
lished in ANALOG Computing. To
simplify the identification of errors,
each program line is evaluated im-
mediately after it's typed, eliminating the
need for cumbersome checksum listings.
When you've finished entering a program us-
ing BASIC Editor II, you can be certain it
contains no typos.
An option is provided for those who wish
to use standard BASIC abbreviations. Also,
the program retains all Atari editing features.
Finally, for those who prefer to type programs
the conventional way, using the built-in edi-
tor, a post-processing mode is available. It al-
lows you to check typing after the entire
listing has been entered.
Typing in the Editor
To create your copy of BASIC Editor II,
follow the instructions below— exactly.
Disk version:
(1) Type in Listing 1, then verify your work
with Unicheck (see Issue 39).
(2) Save the program to disk with the com-
mand SAVE "D^DITORLl.BAS".
(3) Clear the computer's memory with the
command NEW.
(4) Type in Listing 2, then verify your work
with Unicheck.
(5) Run the program (after saving a back-
up copy) and follow all the on-screen
prompts. A data file will be written to your
disk.
(6) Load Listing 1 with the command
LOAD "EDITORL1.BAS".
(7) Merge the file created by List-
ing 2 with the command ENTER
"D.ML.DAT".
(8) Save the resultant program with the com-
mand LIST "D:EDITORII.LST".
Cassette version:
(1) Type in Listing 1 and verify your work
with Unicheck.
(2) Save the program to cassette with the
command CSAVE. (Do not rewind the
cassette.)
(3) Clear the computer's memory with the
command NEW.
(4) Type in Listing 2 and verify your work
with Unicheck.
(5) Run the program and follow the on-
screen prompts. A data file will be written to
your cassette.
(6) Rewind the cassette.
(7) Load Listing 1 with the command
CLOAD.
(8) Merge the file created by Listing 2 with
the command ENTER "C:".
(9) On a new cassette, save the resultant pro-
gram with the command LIST "C:".
Using the Editor
Take a look at one of the BASIC program
listings in this issue. Notice that each program
line is preceded by a two-letter code. This code
is the checksum for that line; it's not a part
of the program.
To enter a program listing from the maga-
zine, load BASIC Editor II with the ENTER
command, and run it. You'll be asked if you
wish to allow abbreviations (see your BASIC
manual). If you do, type Y and press
RETURN. Otherwise, type N.
Note: If you set BASIC Editor II to allow
abbreviations, the program will run slightly
slower.
Your screen will now be divided into two
"windows." The upper window will display
each line after it's processed, as well as the
checksum generated for that line. The lower
window is where program lines are typed and
edited.
When the program's waiting for input, the
cursor will appear at the left margin of the typ-
ing window. Type a program line and press
RETURN. The line will be evaluated and
reprinted in the message window, along with
the checksum generated.
If the checksum matches the one in the
magazine, then go on to the next program line.
Otherwise, enter the command E (edit) and
press RETURN. The line you just typed will
appear in the typing window, where you may
edit it. When you think the line has been cor-
rected, press RETURN, and it'll be
reevaluated.
Note: You may call up any line previously
typed, with the command E followed by the
number of the line you wish to edit. For ex-
ample, E230 will print Line 230 in the typ-
ing window. Do not attempt to edit any
program lines numbered 32600 and higher.
These lines fall within the BASIC Editor II
program.
If you're using BASIC abbreviations, the
two versions of the command E work slightly
differently. The command E, without a line
number, will call up the line exactly as you
typed it. When you append the line number,
the line will be printed in its expanded (un-
abbreviated) form.
Leaving the Editor
You may leave BASIC Editor H at any time,
by entering either B (BASIC) or Q (quit). If
you type B, the Editor will return you to BAS-
IC. Enter LIST to review your work, if you
wish. Note that lines 32600 and above are the
Editor program. Your work will appear be-
fore these lines. To return to the Editor, type
GOTO 32600.
Type Q, and you'll be asked if you really
want to quit. If you type Y, the Editor pro-
gram will be erased from memory, and you
may then save your work in any manner you
like. If you type N, the Q command will be
aborted.
Large listings
If the program you're entering is particu-
larly long, you may need to take a break.
When you want to stop, type Q and press
RETURN, then save your work to disk or cas-
sette. When you're ready to start again, load
the program you were working on, then load
BASIC Editor B with the ENTER command.
Type GOTO 32600, and you're back in
business.
JULY A.N.A.L.O.Q. Computing
The post-processor
Many people may not want to use BASIC
Editor II when entering a program listing,
preferring, instead, the Atari's built-in editor.
For that reason, BASIC Editor II will allow
you to check and edit your programs after
they've been typed.
To take advantage of this option, type any
magazine program in the conventional man-
ner, then save a copy to disk or cassette (just
in case). With your typed-in program still in
memory, load BASIC Editor II with the
ENTER command, then type GOTO 32600.
Respond with N to the "abbreviations"
prompt. When the Editor appears on your
screen, enter the command P (post-process),
and the first program line will appear in the
typing window. Press RETURN to enter it into
the Editor.
The line will be processed, and the check-
sum, along with the program line, will be
printed in the upper window. If the checksum
matches the one in the magazine, press
RETURN twice, and the next line will be
processed.
If you find you must edit a line, enter the
command E, and the line will be moved back
to the typing window for editing.
When the entire listing has been checked,
you'll be asked if you wish to quit. Type Y
and press RETURN. The Editor program will
be removed from memory, and you may then
save the edited program in any manner you
wish.
Murphy's Law
Anyone who's been associated with comput-
ing knows this is the industry Murphy had in
mind. You may find that, after typing a pro-
gram with BASIC Editor II , it still won't run
properly. There are two likely causes for this.
First, it may be that you're not following the
program's instructions properly. Always read
the article accompanying a program before at-
tempting to run it. Failure to do so may present
you with upsetting results.
Finally, though you can trust BASIC Edi-
tor U to catch your typos, it can't tell you if
you've skipped some lines entirely. If your
program won't run, make sure you've typed
all of it. Missing program lines are guaran-
teed trouble.
One last word: Some people find it an un-
necessary and nasty chore to type REM lines.
I don't condone the omission of these lines,
since they may be referenced within the pro-
gram (a bad practice, but not unheard of). If
you want to take chances, BASIC Editor II is
willing to comply.
When you 've finished entering a
program using BASIC Editor II, you
can be certain it contains no typos.
Listing 1.
BASIC listing.
32608 IF FL THEM 32616
32602 DIM L5tll5),5VStll5>,C2*I2),BStl
15),M$tll9),5$C98>,E5(69),A$Cl> |FL=1I5
TMTAB=PEEK U36) +PEEK C1371«256
32604 GRAPHICS 8 ! POKE 718, ! P = 8 ! ABR = B 1
? "ALLOW ABBREVIATIONS"; IINPUT ASIIF A
$ = "Y" OR AS="y" THEN ABR=1
32606 BSU)=" ":B$I115)=" "!B$C2)=BS
32616 OPEM B17,4,8,"El"iLS=" "IG05UB 3
2662I5TART=B
32618 POKE 766,l:P0KE 83, 3? : POSITION 1
,3:IF LENCLSX39 THEM ? LSlGOTO 32624
32620 IF LENCLSX77 THEM ? L$fl,38)l?
L$C39,LENCL$)) IGOTO 32624
32622 ? LSC1,3B>|? LSC39,76)I? l*C77,L
EN(LS)>
32624 POKE 752,0!P0KE 766, OlPOKE 555,3
4!P0KE B2,1:P0KE 83 , 38 i POSITION 8,181?
'■ "jlINPUT 817;LS|P0KE 766,1
32626 IF aS="P" OR LS="P") AND STARTr
THEN P=llL$r""
32628 IF L$="E" OR LS="e" THEN E=1!P0S
ITION 1,10!? 5VS GOTO 32624
32630 IF LS="0" UR L$="q" THEN 32898
32632 IF L«="" AND P=l THEN 32686
32634 IF LS="" THEN 32624
32636 IF LS="B" OR LS="b" THEM GRAPHIC
5 8!? "TVPE "GOTO 32608' TO CONTINUE"!
END
32638 IF LSU,1)="E" OR LStl,l>="e" TH
EN E=llTRAP 32624iEL=UALtL*C2>) IP05ITI
ON 1,9ILIST ELIGOTO 32624
32640 5U$=L$ITRAP 32624 1 X=VAL <L$>
32642 5TART=11IF P AMD NOT E THEN 326
52
32644 G05UB 32674HF MOT ABR OR P THE
N 32652
32646 POKE 766,0!? CHRS 1125) I POSITION
0,3!L=VALILSJ !LI5T Ll? I? I? "CONVILS
= B$
32648 POSITION 8,8:P0KE 842,13!ST0P
32650 POKE 842,12IA=USRCADRISS),ADRILS
>,4> !L$=L$C1,A>
32652 CHK5UM=U5RC6DRCM$),ADRCLS>,LENfL
S)> !CHK5UM=CHKSIimPEEK 11542) »65536
32654 CHK=CHK5UM-(IMT(CHK5UM/676)*676)
!HI=INTCCHK/26) ! L0=CHK- CHI*26> IC2*C1>=
CMRS(HI+65) lC2$C2)=CHRStLO*65)
32656 IF NOT P OR E THEM E-8:G05UB 32
662!IF MOT P THEM 32668
32658 POKE 8S,39!P0KE 752,1!F0R X=3 TO
5!P05ITI0M 1,X|? B*tl, 38) [POSITION 1,
X+7:? B$(1,3B> !MEKT XlPOKE 83,38
32668 POKE 766.11P0KE 83, 38 ! POSITION 6
,71? C2$!P0KE 7S2,0!G0T0 32618
32662 GOSUB 327B2IP0KE 766.8SP0KE 752,
II? "S"1P0KE 82,1IDL=PEEK1560)+256»PEE
KC56D-M
32664 POKE DL-l,76lP0KE DL*2,6lP0KE DL
*3,112iP0KE DL*4,112lP0KE DL+5.112IP0K
E DL*13,112|P0KE DL+14,112
32666 POKE DL+22, 112 1 POKE DL*23,112lP0
KE DL*24,65tP0KE DL+25, PEEK CS60) I POKE
DL*26,PEEKt561) : POKE 83.39
32668 POSITION 20,81?
ff "IPOSITIOM 0, 7 ! "
l?iffl:mjii;j
IPOSITIOM 1,7
32672~P0KE' 559,34 I RETURN
32674 GRAPHICS OlPOKE 5S9,BIP0KE 766,1
IPOKE 82, OlPOKE 83, 39 1 POSITION 8,31? L
$!? I? I? I? "COMT"!POSITION 8,8
32676 POKE 842.13I5T0P
32678 POKE B42.12ITRAP 32682 I A=USR tADR
tES), HAULS)) IIF A=4 THEN POP IGOTO 32
32680 RETURN
32682 GOSUB 32662IS0UMD 8,75, 10, 8 IFOR
K=l TO 20INEKT KlSOUMD 8,8, 8, BIPOSITIO
N 1,31? "SVMTAX ERROR!"!POKE 766,1
32684 POKE 83, 38 1 POSITION 1,181? SV$|G
0T0 32624
32686 LIME = PEEK CSTHTAB) tPEEK C5TMTAB+11
*2S6!IF LINE>32S99 THEN 32698
32688 0FS=PEEK<5TMTAB+2J I 5TMTAB=5TMTAB
♦0F5IP0SITI0N 1.9ILIST LINEIGOTO 32624
32690 POKE 766, B I POSITION 1,181? "READ
V TO OUIT";HNPUT ASIIF ASO"Y" THEN P
05ITION 1,101? B$ll, 38) IGOTO 32624
32692 GRAPHICS 81? I? I? IFOR X=32600
TO 32636 STEP 21? XINEXT XI? "C0NT"IP0
SITION B,BIPOKE 842,131ST0P
32694 POKE 842, 12 1 GRAPHICS 01? I? I? I
FOR X=32638 TO 32674 STEP 21? XINEXT X
I? I? "COMT"lPOSITIOM 8,B
32696 POKE 842.13IST0P
32698 POKE 842.12IGRAPHICS Bl? I? I? I
FOR X=32676 TO I27B2 STEP 21? XlMEXT X
I? I? "POKE 84Z,12"lP0SITI0M 8,8
32708 POKE B42,13I5T0P
32702 POKE 16.112IP0KE 53774, 112 IRF.TIIR
N
CHECKSUM DATA.
(see issue 39's Unicheck)
32608 DATA 6,665,923,757,889,171,225,8
98,532.499,918,267,912,144,735,8453
32638 DATA 97,358,238,693,706,878,317,
127,36,597,238,258,182,430,168,5315
32668 DATA 864,953,472.385,887,724,72,
687,988,736,625,612,672,184,891,9672
32698 DATA 8,856,85,949
Listing 2.
BASIC listing.
18 DIM L$tl2B>,ML*C115),A$Cl>
20 GRAPHICS 8IP0KE 710,81? "QI5K OR HA
55ETTE"; IINPUT ASlIF AS<>"C" AND A*<>"
D" THEN 28
30 IF A$="C" THEM SB
40 ? "PLACE FORMATTED DISK IM DRIUE"!?
"THEN PRESS RETURN" I INPUT LSlOPEK HI,
8,B,"DlML.DAV"lG0T0 68
50 ? I? "READY CASSETTE, PRESS RETURN"
;UMPUT LSlOPEN HI, 8, B. "CI"
60 L5="32608 M$ C1)="|LS tl3)=CHRS 134)
70 N=119lG0SUB 138 1 LS C14) =ML* 11, 58) |L*
(LENCL$)+1)=CHRS134)I? tll)L$
80 L$U)="32618 MS C59)="IL$ tl4)=CHR$ t3
4) |L$[15)=ML*C59> |LS(LENCL$) +1)=CHR*13
4) I? HIjLS
9B LSC1)="32612 5«r"|L$C18)=CHRS (34)
100 MLS= N = 98IG05UB 138 I L* til) =MLS I L
$(LEMtLS)tl)=CHRS(S4) I? B1JL*
118 LSC1)="32614 ES:"!L$(10)=CHR$C34)
120 MLS=""IN=69IG05UB 138 I L* 111) =ML$ I L
$(LENtL*)tl)=CHR$t34) I? ttllL$!END
130 FOR Xrl TO NlREAD AIMLS (X)=CHR$ (A)
INEXT XIRETURN
140 DATA 164,184, 133,284, 184, 133, 283,1
04,104,133,205,169,8,141,3,6,141,2,6,1
41,4,6,141,5,6
150 DATA 141,6,6,238,3,6,32,68,218,172
,2,6,177,203,133,212,32,178,217,32,182
,221,32,68,218
168 DATA 173,3,6,133,212,32,178,217,32
,219,218,32,218,217,165,212,141,8,6,16
5,213,141,1,6,24
176 DATA 173,8,6,189,4,6,141,4,6,173,1
,6,189,5,6,141,5,6,144,3,238,6,6,238,2
188 DATA 6,172,2,6,196,265,288,176,173
, 4, S, 133, 212, 173, 5, 6, 133, 213, 96
198 DATA 184,184,133,264,184,133,283,1
84,184,141,255,6,169,8,133,213,216,165
,86,133,265,165,89,133,286
ZOO DATA 174,255,6,24,165,285,165,48,1
33,205,144,2,230,206,282,288,242,168,0
,177,205,261,64,144,18
218 DATA 281,96,144,19,201,128,144,18,
201,192,144,6,281,224,144,7,176,8,24,1
85,32,144,3,56,233
226 DATA 64,145,203,288,192,114,248,2,
208,215,177,283,201,32,288,3,136,288,2
47,288,132,212,96
238 DATA 184,184,141,254,6,184,141,253
,6,169,6,133,213,216,165,136,133,285,1
65, 137, 133, 286, 168, B, 177
248 DATA 285,205,253,6,288,8,280,177,2
85,205,254,6,248,15,168,2,177,265,24,1
81,285,133,205,144,228
250 DATA 230,286,176,224,168,4,177,285
,281,55,248,4,168,8,240,8,132,212,96
CHECKSUM DATA.
(see issue 39's Unicheck)
IB DATA 283,265,465,844,294,573,652,27
B,978,797,278,275,835,2B9,IB1,7639
58 DATA 355,94,254,428,935,848,588,41 __
,974,564,5435 |H
JULY A.N.A.L.O.Q. Computing
71
■-. , j?'">
^r&^&sv/;*^
by Arthur Leyenberger
I have talked about it before, and I'm sure
I will talk about it again. Technology!
Our world is surrounded by, and
couldn't exist without, the wonders that
have been made possible by modern
technology.
I remember reading a book in the late 1970s
called Computer Lib by Ted Nelson. It con-
tained all kinds of interesting information
about computers, how they worked and how
they were and would be used. I was fascinated
by the future of computers. He was really
talking about technology.
I recall one of the topics that was especially
futuristic included the use of computers in
banking. This was many years before the ad-
vent of electronic funds transfer (EFT) and
automated teller machines. I could barely im-
agine what it would be like to have money
transferred electronically from one computer
to another.
At the time I thought I wouldn't want my
bank account to use this new technology. I
feared that one little computer mistake could
wipe out my savings or cause unnecessary
hassles trying to correct it. Now, of course,
7a
I take EFT for granted. Twice a month my
paycheck is automatically transferred from
the company's bank computer to my bank's
computer. I rarely give it a second thought.
The same is true for automated tellers. The
convenience and accessibility of these
machines have changed my life. No longer
do I have to make special arrangements to
have access to my own money (i.e. banking
hours). In fact, it seems so natural. However,
I still refuse to deposit money into my account
with one of these machines.
We are touched by technology in so many
ways. Even the car I drive is affected. It
would be impossible to have a car that had
both good performance and good gas mile-
age without a computer-controlled engine.
The most obvious example of technology
is the computer that we all use and (usually)
love. It still provides plenty of power for all
kinds of tasks. One of the reasons many Atari
users refuse to upgrade to the ST is that their
8-bit machine can run hundreds of programs;
most users have not exhausted the potential
of their computer. That is as much a testa-
ment to the power of the 8-bit Atari as it is
to the users.
New Disk Technology
Another improvement in technology is just
around the corner and will dramatically af-
fect the way we use computers. A new storage
technology has been developed that will
revolutionize the design of future computers.
It uses a combination of magnetic and opti-
cal mediums to create a floppy disk that can
store 20 megabytes of data.
The original Atari 810 disk drives could
store only 90K of data on a 5 '4-inch floppy
disk. This was because they used only one
side of the disk and a low-density data for-
mat. Over the years a number of new disk
drives were introduced by Indus, Astra and
others that used either twice the density or
both sides of the disk to store data. Double-
sided, double-density disks, like those used
on IBM PCs and clones, can store 360K of
data.
With the arrival of the AT and DOS 3.0,
IBM introduced 1.2-megabyte floppy disks.
Later, when 3 '/2-inch disks became available,
two storage capacities appeared: 720K and
1.44 megabytes. It wasn't until the introduc-
tion of CD-ROM (compact disc read-only
JULY A.N.A.L.O.Q. Computing
memory) that a significant increase in remov-
able storage capacity was attained.
Most of us are now familiar with the new
recording media used for music called the
compact disc (CD). These laser "records"
can contain up to 73 minutes of pop, click
and static-free music with a fantastic signal-
to-noise ratio and dynamic range. These same
discs can also contain an incredible amount
of data. Up to 550 megabytes of data can be
stored on one side of a CD. That's equiva-
lent to the storage capacity of over 6,000 of
the original Atari 810 floppy disks.
Read-only memory (ROM) is not a new
concept, either, and is one that is familiar to
most computer users. The information in the
ROMs is permanent and can only be "read"
by the computer. All computers, including
Atari 8-bit machines, incorporate ROMs that
contain the necessary "startup" information
the computer needs to perform its self-check
and access disk drives.
The storage medium for digital audio discs
and CD-ROMs is exactly the same. They use
similar players in which a laser shines a beam
under the disc and detects the presence or ab-
sence of microscopic pits on the disc surface.
Using a binary code common to all com-
puters, a pit is a and the absence of a pit
is a 1. In one case the data represents digi-
tized music, and in the other it can represent
programs, databases, dictionaries, encyclope-
dias or any other collection of information.
CD-ROMs are perfect for storing large
amounts of information that will never
change. However, a computer disk drive
needs the ability to write as well as read. Two
emerging technologies provide a solution to
that need: WORM drives and floptical disks.
WORM means "write once, read many."
Data is permanently written to a disk by
means of a laser that burns small holes into
the optical disk. However, this can happen
only once and is not practical when the stored
data may change. WORM drives have been
around for several years but have not caught
on as a replacement for floppy or hard disks.
A more promising technology has been
created by Insite Peripherals under the
guidance of Jim Shugart (one of the original
designers of the 5 !4 -inch floppy disk). Each
removable "floptical" disk can store 20
megabytes of data. Physically, they are simi-
lar to 3 '/2-inch, high-density, 1.44-megabyte
disks.
JULY A.IM.A.L.O.G. Computing
The difference, however, is in the method
used to store data: a combination of optical
servo and magnetic recording technologies.
The 3 '/2-inch magnetic disk is inscribed with
concentric optical tracks at 20 micron inter-
vals. A photo-detector (infrared LED) is used
to guide the magnetic read/write head result-
ing in more precise storage of the data.
This arrangement allows a much higher
track density compared with standard drives
\/ A promising
technology, the
removable
"floptical" disk
can store 20
megabytes of data,
though they are
physically similar
to 3 ¥2 -inch disks.
(1,250 vs. 135 tracks per inch). This means
that more data can be packed onto the disk.
The disk spins at 720 rpm, the servo-
controlled head assembly is self-aligning, and
the seek time is said to be 65 milliseconds.
This access speed is typical for a 20-megabyte
hard disk used on many PCs and com-
patibles.
Insite Peripherals will be selling their new
optical-magnetic drives primarily to
manufacturers who may then incorporate
them into other products. Initially the drives
will sell for about $250 and the special disks
for under $10. You can probably expect to see
some products containing floptical disk drives
by the end of the year.
Imagine the possibilities! What if Atari
were to use one of these new disk drives in
the much talked-about portable ST? Instead
of containing a heavy, expensive and power-
hungry hard disk, the ST laptop would be an
innovative computer and be much more usa-
ble. It wouldn't be the first time Atari in-
troduced a powerful yet affordable computer.
Let's hope they can do it again.
Rumor Mill
As of this writing, Atari may be preparing
to shed the burden of its Federated Stores. As
you probably know, Atari purchased the Fed-
erated Electronics chain a couple of years
ago, hoping to improve their distribution
channel for their computer and video game
products. However, since the consumer elec-
tronics stores were bought, Atari has had
nothing but financial and operational
headaches with the stores.
The Federated group of stores has shown
continued losses which have affected the bot-
tom line of Atari financials. Atari claims that
the stores were overvalued when they were
purchased which led Atari to pay an inflated
price for the stores. The outcome of this mat-
ter will be decided in the courts.
Another problem has stemmed from Atari
allegedly playing favorites with their own
stores. Some dealers claim that the Federat-
ed stores have been able to purchase products
at lower prices than independent dealers. Fur-
ther, when new products or upgraded
products became available, the Federated
stores allegedly were the first to receive them.
A specific example of this supposedly oc-
curred when Atari began including double-
sided drives in the 520STFM computer.
Other dealers around the country apparent-
ly continued to get the older machines while
Atari's own stores got the new models.
Whether these allegations are true or not,
it does seem that the Federated stores have
been, if nothing else, a thorn in Atari's cor-
porate side. Perhaps it will be for the best if
Atari decides to dump the stores. At least
maybe then, Atari can get back to the busi-
ness of making and selling computers. And
with Atari's scarce resources, they can't af-
ford to spread themselves too thin.
Arthur Leyenberger is a computer analyst
and freelance writer who works out of his
home in New Jersey. He can be reached on
CompuServe at 71266,46 or on DELPHI as
ARTL. C=l
73
JULY A.N.A.L.O.Q. Computing
by Matt Fruin
Left over from ancient days, the maze
was always a great place to play and
explore. At least it was until you and
your friend, Velbert, got lost. With
night coming on, you and Velbert
grew more and more confused. Suddenly, the
huge stone blocks comprising the maze rear-
ranged themselves, shifting into new config-
urations. Far off in the distance you heard the
scratching sounds of something big wander-
ing the maze. Too late you remembered the
legend of the monsters, the spirits of those
who died in the maze, who, destined to
wander it for all eternity, came out with the
stars and hunted those who are unwise
enough to remain in the maze at night ....
Playing the Game
The object is to maneuver your player from
the top left corner of the maze to the exit lo-
cated at the lower right of the maze. The
game can be paused by pressing any key, and
can be aborted by pressing a console key (not
System Reset), except when the game has
been paused. Along the right side of the
screen are choices to modify the game. To
change any of the values, press Option until
the larger cursor is opposite the category you
want to change. Then press Select, either to
move the smaller cursors, changing the visi-
bility or game variation, or to change num-
bers, representing speeds or number of
monsters.
Game Variations
There are three different game variations.
These are capture, paralyze and kill. In cap-
ture, a player must touch the four monsters
controlled by the computer before he or she
can exit. The eight colored boxes on the far
right signify which of the monsters (orange
to the orange monster, blue to blue, etc.) have
already been "captured." The top four cor-
respond to the first player, the bottom four
to the second player. In the paralyze option,
the object is to exit without touching any of
the computer-controlled monsters. If a play-
er is touched, he or she is frozen for a few
seconds and then slowly regains speed. In the
kill variation, touching any of the monsters
ends the game for that player. The other play-
er can continue on, and try to get to the exit.
JLY A.N.A.L.Q.Q. Computing
Mazerunner
••
Speed
it
There are three different visibility levels.
These are clear, blackout and flash. When the
visibility is clear, the entire maze is visible
at all times. When it's set on blackout, the
maze is black and the walls are not visible.
In the flash level, the maze is black except
for periodic flashes of visibility, which last
for a fraction of a second. In all three levels
the players and monsters are always visible.
Enemy
Here the players can choose the number of
computer-controlled enemies they will face
in the kill and paralyze variations. The num-
ber ranges from to 16. Whatever number
is chosen, though, does not affect the cap-
ture variation, in which there are always four
computer-controlled monsters.
The eight colored
boxes on the far
right signify
which of the
monsters (orange
to the orange
monster, blue to
blue, etc.) have
already been
"captured.''
This allows the players to choose speeds
for the monsters and each of the players in-
dividually. Speeds range from 1 to 4, 1 be-
ing fastest and 4 being slowest.
Limit
There are only two possible selections for
this choice: Y for yes and N for no. During
every game the timer counts from 000 to 999.
If Y is chosen for the time limit, the game
ends when the counter reaches 999. Other-
wise, the counter just rolls over to 000 and
continues counting. The time it takes for the
counter to count from 000 to 999 is about 2
minutes, 45 seconds.
Good luck!
Matt Fruin has been programming his Atari,
since 1982. Mazerunner is his first 100%
machine-language game.
CAME:
CAPTURE '
PhRALYZE
KILL
VISIBILITY:
CLEAR
LHhCKDUT
FLASHES
ENEMY :Q±
SPEED:
ENEMY:!
PLh¥ER1:1
PLAYERZ'.l
LIMIT :Y
TIMER: DM?
76
JULY A.N.A.L.O.B. Computing
LISTING 1: MIL EDITOR DATA
1006 DATA 255,255,0,96,251,96,169,12,1
33,12,169,96,133,13,169,1,4649
1O10 DATA 133,9,32,64,108,169,64,133,2
04,169,0,133,203,162,0,160,7168
1020 DATA 0,145,263,200,208,251,230,20
4,232,224,16,208,242,169,83,133,4392
1030 DATA 203,162,96,169,3,157,66,3,16
9,0,157,69,3,169,283,157,6002
1O40 DATA 68,3,169,12,157,74,3,169,0,1
57,75,3,32,86,228,169,4446
1O50 DATA 6,133,88,169,64,133,89,169,0
,141,47,2,169,0,141,48,2380
1060 DATA 2,169,128,141,49,2,169,46,14
1,47,2,169,255,141,28,208,6982
1070 DATA 169,148,141,198,2,169,150,14
1,196,2,169,68,141,197,2,32,5544
1080 DATA 151,96,32,170,96,32,100,98,3
2,230,98,169,97,141,231,6,6845
1090 DATA 169,193,141,36,2,169,118,141
,37,2,76,171,100,160,0,132,4027
1100 DATA 203,169,64,133,204,185,74,11
2,145,203,200,192,160,208,246,96,3966
1110 DATA 169,8,133,208,133,209,169,16
0,133,206,169,64,133,207,162,5,9913
1120 DATA 32,239,96,202,16,250,162,87,
32,2,97,202,16,250,32,217,7595
1130 DATA 96,32,217,96,162,5,32,239,96
,202,16,250,76,42,97,160,6952
1140 DATA 6,32,32,97,200,169,0,145,206
,200,192,25,208,249,169,240,3693
1150 DATA 145,206,76,20,97,160,0,169,2
55,145,206,200,192,25,208,249,3173
1168 DATA 169,248,252,96,247,97,145,20
6,32,20,97,96,160,0,32,32,3208
1170 DATA 97,200,169,0,145,206,200,192
,24,208,249,32,32,97,24,169,7328
1180 DATA 40,101,206,144,2,230,207,133
,206,96,169,255,145,206,208,169,4725
1190 DATA 248,145,206,96,173,10,210,41
,63,133,206,56,233,26,176,244,217
1200 DATA 173,10,210,41,62,133,207,56,
233,48,176,244,169,0,133,203,73
1210 DATA 133,204,24,165,207,133,203,6
,283,6,203,101,203,133,203,162,1255
1220 DATA 4,6,203,38,204,202,208,249,2
4,165,203,101,206,144,2,230,1392
1230 DATA 204,133,203,24,165,203,185,1
60,144,2,230,204,133,203,24,165,328
1240 DATA 204,105,64,133,204,160,0,177
,203,41,64,288,167,169,1,133,7891
1250 DATA 207,173,10,210,41,3,106,144,
33,106,144,18,198,204,160,96,7313
1260 DATA 32,207,97,230,204,165,206,20
8,71,198,204,76,238,97,160,160,3220
1270 DATA 32,207,97,165,206,208,57,76,
3,98,106,144,12,160,1,32,2776
1280 DATA 207,97,165,206,240,92,76,230
,97,198,204,160,255,32,207,97,2561
1290 DATA 230,204,165,206,240,101,76,2
30,97,177,203,41,64,133,206,165,1217
1300 DATA 207,208,1,96,165,206,240,3,7
6,81,98,169,1,133,206,96,7176
1310 DATA 232,224,15,208,156,76,42,97,
169,80,160,216,145,203,160,176,1789
1320 DATA 145,203,248,97,243,98,160,13
6,145,203,160,96,145,203,76,61,104
1330 DATA 98,169,80,160,80,145,203,160
,120,145,203,160,200,145,203,160,3535
1340 DATA 160,145,203,76,61,98,160,0,1
77,203,9,85,145,203,160,40,7225
1350 DATA 145,203,169,80,160,41,145,20
3,160,1,145,203,76,61,98,160,7766
1360 DATA 39,169,85,145,203,160,255,19
8,204,145,203,24,230,208,208,2,2777
1370 DATA 230,209,165,208,281,228,288,
9,165,209,201,1,208,3,96,104,8894
1380 DATA 104,24,152,101,203,144,2,230
,204,133,203,162,0,134,207,76,9665
1390 DATA 135,97,162,1,134,205,202,189
,218,110,133,203,232,189,218,110,4688
140O DATA 133,204,164,205,136,192,0,24
0,24,32,218,98,76,118,98,189,8249
1410 DATA 218,118,201,24,208,2,230,204
,24,101,203,144,2,230,264,133,462
1420 DATA 203,160,8,132,206,232,189,21
8,110,24,42,42,101,205,168,185,9819
1430 DATA 113,111,164,206,192,9,240,8,
145, 203, 280, 132, 206, 76, 151, 98, 533
1440 DATA 224,151,208,263,230,205,165,
205,201,5,240,5,162,0,76,105,8062
1450 DATA 98,162,31,189,45,113,157,176
,6,202,16,247,162,5,189,75,7556
1460 DATA 113,157,240,6,202,16,247,96,
165,203,24,105,40,144,2,230,7519
1470 DATA 204,133,203,96,160,2,185,80,
113,133,203,185,83,113,133,204,400
1480 DATA 185,86,244,98,239,99,113,145
, 203, 136, 16, 238, 96, 173, 228, 6, 186
1490 DATA 208,35,206,229,6,16,30,169,4
,141,229,6,173,31,208,281,8046
1500 DATA 3,240,32,201,5,240,101,201,6
,240,16,173,132,2,240,11,6889
1510 DATA 173,133,2,240,6,32,128,109,7
6,95,228,173,214,6,288,248,1077
1528 DATA 76,154,106,162,1,189,192,6,2
01,0,240,5,169,0,76,65,4287
1530 DATA 99,169,150,141,196,2,173,176
,6,10,32,110,99,169,0,160,4631
1540 DATA 0,145,203,238,176,6,173,176,
6,201,7,208,5,169,0,141,6250
1550 DATA 176,6,24,10,32,110,99,169,25
5,160,0,145,203,76,35,99,6162
1560 DATA 170,189,178,6,133,283,189,17
9,6,133,204,96,173,176,6,170,9607
1570 DATA 56,233,2,176,57,32,163,99,16
9,0,145,203,254,192,6,189,9868
1588 DATA 192,6,281,3,288,5,169,0,157,
192,6,32,163,99,169,60,5435
1590 DATA 145,203,76,35,99,173,176,6,2
48,2,169,3,24,125,192,6,4435
1600 DATA 168,185,194,6,133,203,185,20
0,6,133,264,160,0,96,233,1,7925
1610 DATA 176,101,238,241,6,173,241,6,
201,10,208,25,238,240,6,169,214
1620 DATA 0,141,241,6,173,176,6,10,32,
110,99,198,203,198,203,173,769
1630 DATA 240,6,32,14,100,173,241,6,20
1,7,208,18,173,240,6,201,8685
1640 DATA 1,268,240,99,235,100,11,169,
0,141,240,6,141,241,6,76,7012
1650 DATA 210,99,173,176,6,10,32,110,9
9,198,203,173,241,6,32,14,5576
1660 DATA 100,76,35,99,10,10,185,109,1
70,160,0,189,113,111,145,203,7974
1670 DATA 152,24,105,40,168,232,192,16
0,208,241,96,233,1,176,32,173,1060
1688 DATA 176,6,10,32,110,99,198,283,1
98,203,238,242,6,173,242,6,1740
1690 DATA 201,5,208,5,169,1,141,242,6,
32,14,180,76,35,99,233,4738
1700 DATA 2,176,36,173,176,6,10,32,110
, 99, 198, 203, 173, 176, 6, 41, 6149
1710 DATA 1,170,254,243,6,189,243,6,20
JULY A.IM.A.L.O.Q. Computing
77
1,5,208,5,169,1,157,243,9359
1720 DATA 6,32,14,100,76,35,99,173,176
,6,10,32,110,99,198,203,6071
1730 DATA 198,203,198,203,173,231,6,73
,84,141,231,6,32,18,100,76,4780
1740 DATA 35,99,169,204,141,34,2,169,1
10,141,35,2,32,115,101,169,4625
1750 DATA 0,141,223,6,173,192,6,208,8,
238,223,6,169,2,141,227,9397
1760 DATA 6,169,4,141,229,6,169,251,14
1,34,2,169,98,141,35,2,4516
1778 DATA 169,0,141,228,6,169,150,141,
196,2,32,124,108,169,0,141,6146
1780 DATA 232,6,141,233,6,141,234,6,14
1,235,6,141,226,6,133,224,9919
1790 DATA 141,224,6,141,225,6,165,224,
240,252,141,228,6,169,168,141,3136
1800 DATA 1,210,236,100,231,101,32,52,
108,169,0,141,218,6,169,16,5793
1810 DATA 141,219,6,169,0,141,8,210,16
9,3,141,15,210,169,0,141,6299
1820 DATA 220,6,141,221,6,169,15,141,1
10,6,141,111,6,32,115,101,3436
1830 DATA 169,1,141,214,6,169,0,162,3,
157,192,2,202,16,250,169,8657
1840 DATA 150,141,196,2,32,170,96,32,1
75,103,169,0,133,209,32,160,7135
1850 DATA 108,169,255,141,30,208,169,0
,141,34,2,169,197,141,35,2,3787
i860 DATA 206,214,6,165,224,240,252,17
3,218,6,240,10,169,0,141,8,8102
1870 DATA 210,169,3,141,15,210,173,31,
208,201,7,240,3,76,140,180,7427
1880 DATA 173,232,6,240,16,173,233,6,2
40,11,76,153,100,173,31,208,8749
1890 DATA 201,7,208,249,96,162,1,189,1
02,6,201,132,208,23,189,210,690
1900 DATA 6,208,18,169,5,141,218,6,169
,15,141,220,6,169,30,141,6509
1910 DATA 221,6,76,153,100,202,16,223,
198,224,162,1,189,232,6,208,1530
1920 DATA 38,189,234,6,240,11,32,165,1
07,173,208,6,240,25,76,194,8639
1930 DATA 101,254,224,6,189,224,6,221,
243,6,208,11,169,0,142,108,8056
1940 DATA 6,157,224,6,32,232,103,202,1
6,210,238,226,6,173,226,6,405
1950 DATA 205,242,6,240,3,76,73,101,16
9,0,141,226,6,173,192,6,6667
1960 DATA 240,6,232,101,227,102,32,244
,101,76,73,101,32,141,105,76,6100
1970 DATA 73,101,238,80,6,174,80,6,224
,16,208,6,162,255,142,80,8583
1980 DATA 6,96,189,48,6,201,6,240,233,
189,0,6,133,203,189,16,7856
1990 DATA 6,133,204,62,64,6,62,64,6,17
6,16,32,218,102,165,203,6783
2000 DATA 157,0,6,165,204,157,16,6,76,
244,101,189,48,6,201,4,5247
2010 DATA 240,65,41,8,240,23,169,64,15
7,64,6,160,0,32,157,103,4058
2020 DATA 160,40,32,157,103,169,6,157,
48,6,76,244,101,198,204,160,9772
2030 DATA 216,32,86,106,230,204,160,0,
32,103,106,160,1,32,103,106,4592
2040 DATA 160,80,32,90,106,165,208,201
,1,208,8,189,48,6,73,2,3686
2050 DATA 76,204,102,173,10,210,41,3,1
33,207,189,48,6,201,4,240,7867
2060 DATA 11,165,207,93,48,6,240,4,41,
1,240,231,165,207,106,144,110
JULY A.N.A.L.O.B. Computing
2079 DATA 31,166,144,16,168,216,198,28
4,32,86,186,238,284,165,208,248,4919
2888 DATA 210,76,282,182,168,88,32,86,
106,165,208,248,198,76,282,102,1720
2090 DATA 106,144,12,168,1,32,99,186,1
65,288,240,183,76,282,102,168,1285
2188 DATA 8,32,99,186,165,208,248,171,
165,287,157,48,6,169,1,157,8835
2110 DATA 64,6,32,218,102,76,32,102,18
9,48,6,186,144,33,186,144,4987
2128 DATA 15,168,228,182,223,183,48,32
,157,103,198,284,168,216,32,167,1141
2138 DATA 183,76,146,183,168,0,32,157,
103,160,80,32,167,103,160,40,5959
2140 DATA 76,146,103,168,8,32,157,183,
160,48,32,157,183,189,48,6,4449
2158 DATA 186,186,144,63,24,126,32,6,1
26,32,6,176,11,168,8,32,827
2168 DATA 167,183,168,48,32,167,183,96
,189,32,6,248,25,168,8,32,3868
2178 DATA 167,183,168,48,32,167,183,16
0,1,169,128,32,178,183,160,41,6545
2180 DATA 169,128,32,170,183,96,168,1,
32,146,183,169,158,157,32,6,5363
2190 DATA 76,27,103,62,32,6,176,14,62,
32,6,160,0,32,167,103,1882
2288 DATA 168,48,32,167,183,96,24,62,3
2,6,189,32,6,248,22,32,2858
2218 DATA 89,103,198,284,160,255,169,2
,32,170,183,230,204,169,2,160,933
2220 DATA 39,32,170,103,96,160,255,198
,284,32,146,183,169,10,157,32,8256
2230 DATA 6,76,89,183,152,24,101,203,1
44,2,238,204,133,203,96,189,1631
2248 DATA 32,6,73,255,49,283,145,283,9
6,189,32,6,17,283,145,283,9289
2250 DATA 96,169,128,141,7,212,24,105,
2,133,206,169,255,141,188,6,8578
2268 DATA 169,3,141,29,288,162,3,169,1
,157,8,288,282,16,258,169,9826
2278 DATA 282,141,192,2,169,138,141,19
3,2,96,238,188,6,173,108,6,6658
2288 DATA 281,2,224,183,219,184,288,6,
169,255,141,188,6,96,173,188,9455
2298 DATA 6,178,240,2,169,128,133,285,
189,96,6,133,283,189,98,6,8722
2368 DATA 133,284,62,186,6,62,106,6,17
6,15,32,226,184,173,192,6,6191
2318 DATA 208,6,32,54,189,174,188,6,96
,169,8,133,287,157,184,6,5938
2328 DATA 189,120,2,141,109,6,281,11,2
48,84,254,184,6,281,13,248,9364
2338 DATA 77,254,104,6,201,7,240,70,25
4,104,6,201,14,240,63,169,9533
2340 DATA 0,157,184,6,173,189,6,29,118
,6,281,15,240,40,230,207,8666
2358 DATA 173,189,6,73,15,93,110,6,76,
29,184,165,287,248,13,169,7558
2368 DATA 8,157,184,6,198,287,189,118,
6,76,29,184,173,218,6,288,8545
2370 DATA 5,169,1,141,218,6,169,64,157
,186,6,76,7,184,169,8,3634
2380 DATA 133,77,189,104,6,186,144,44,
106,144,24,168,216,198,284,32,9486
2398 DATA 86,186,238,284,165,288,248,1
95,222,98,6,160,96,32,21,105,8162
2400 DATA 76,209,104,168,80,32,86,186,
165,288,240,175,168,160,32,21,9329
2410 DATA 105,76,269,184,186,144,15,16
8,1,32,99,166,165,288,248,155,316
2426 DATA 32,21,185,76,289,164,168,8,3
2,99,166,165,268,246,146,222,2642
2436 DATA 98,6,168,255,32,21,165,173,1
89,6,157,116,6,169,1,157,5584
2448 DATA 166,6,228,184,215,185,32,226
,184,76,7,164,188,186,6,169,7838
2458 DATA 1,32,133,185,189,164,6,186,1
44,18,186,144,6,222,188,6,4945
2468 DATA 76,252,184,254,168,6,188,166
,6,76,119,165,166,144,6,254,7951
2476 DATA 182,6,76,14,185,222,162,6,18
9,162,6,157,8,288,96,152,6942
2486 DATA 24,125,96,6,144,3,254,98,6,1
57,96,6,96,165,269,73,6979
2496 DATA 2,133,269,238,266,178,169,6,
133,265,32,62,165,232,169,128,1677
2588 DATA 133,285,32,62,185,198,266,96
,138,73,2,178,189,128,6,168,8259
2516 DATA 169,0,145,265,32,133,185,145
,285,268,145,265,138,73,2,176,253
2528 DATA 41,1,168,189,124,6,153,2,288
,138,77,227,6,176,189,138,9898
2538 DATA 6,153,194,2,138,77,227,6,176
,189,128,6,168,32,119,165,7138
2548 DATA 96,169,8,145,265,169,1,32,13
3,165,169,6,145,285,96,286,9357
2556 DATA 145,265,286,145,265,288,96,2
38,136,6,173,136,6,281,4,268,185
2566 DATA 8,169,255,141,136,6,76,54,16
9,176,189,112,6,133,283,189,28
2578 DATA 116,6,133,284,62,132,6,62,13
2,6,176,6,32,112,186,76,3599
2588 DATA 141,165,198,264,166,216,32,8
6,106,230,204,160,0,32,103,106,8456
2596 DATA 166,1,32,163,166,166,88,32,9
8,166,165,288,261,1,268,18,7654
2666 DATA 189,128,216,165,211,166,6,73
,2,133,267,76,246,165,173,18,8312
2618 DATA 216,41,3,133,267,93,128,6,24
8,4,41,1,246,246,165,287,916
2628 DATA 186,144,44,166,144,24,166,21
6,198,284,32,86,186,236,284,165,2786
2638 DATA 288,246,219,166,96,222,116,6
,32,146,166,76,78,186,166,88,7127
2646 DATA 32,86,186,165,268,248,199,16
8,166,32,148,186,76,78,166,186,8881
2656 DATA 144,17,168,1,32,99,166,165,2
88,248,179,168,1,32,146,166,8546
2668 DATA 76,78,166,166,6,32,99,186,16
5,268,248,162,168,255,222,116,4552
2676 DATA 6,32,148,186,165,287,157,128
,6,169,1,157,132,6,32,112,5485
2688 DATA 186,76,141,185,169,6,133,268
,177,283,41,5,268,2,238,268,865
2698 DATA 96,169,0,133,208,177,283,41,
80,208,2,238,208,96,189,128,2628
2768 DATA 6,186,144,11,186,144,4,222,1
28,6,96,254,126,6,96,166,6616
2716 DATA 144,4,254,124,6,96,222,124,6
,96,152,24,125,112,6,144,5833
2728 DATA 3,254,116,6,157,112,6,96,169
,6,133,77,141,223,6,141,7879
2738 DATA 227,6,32,283,187,173,192,6,2
88,26,169,4,141,218,6,141,8668
2746 DATA 211,6,169,192,141,14,212,169
,23,141,6,2,169,188,141,1,5344
2758 DATA 2,76,234,186,169,64,141,14,2
12,169,6,141,216,6,141,211,9953
2766 DATA 6,173,212,166,287,167,248,6,
246,2,16 9,18,169,241,6,176,9337
2776 DATA 262,169,4,282,48,6,157,48,6,
76,225,186,169,1,133,224,8248
JULY A.N.A.L.O.Q. Computing
2789 DATA 162,5,169,0,157,168,6,282,16
,250,169,255,141,252,2,76,1880
2790 DATA 95,228,173,252,2,201,255,240
,13,169,12,141,117,228,169,96,2284
2800 DATA 141,118,228,76,120,110,169,1
,133,224,173,193,6,248,40,173,1078
2810 DATA 222,6,240,6,206,222,6,76,69,
107,169,0,141,196,2,173,7725
2820 DATA 193,6,201,1,240,17,173,10,21
0,41,127,208,10,169,10,141,7320
2830 DATA 222,6,169,150,141,196,2,173,
192,6,208,6,32,35,105,76,5295
2840 DATA 154,107,162,0,189,4,208,240,
62,173,192,6,201,1,240,28,9186
2850 DATA 189,232,6,208,20,169,255,157
,232,6,169,2,141,218,6,169,218
2860 DATA 128,141,221,6,169,15,141,220
,6,76,149,107,189,234,6,201,415
2870 DATA 255,240,20,169,15,141,220,6,
169,224,141,221,6,169,4,141,9574
2880 DATA 218,6,169,255,157,234,6,232,
224,2,208,184,169,255,141,30,3618
2890 DATA 208,32,202,108,76,95,228,169
,0,141,208,6,254,236,6,189,1588
2900 DATA 236,6,221,234,6,208,21,94,23
4,6,169,0,157,236,6,189,9408
2910 DATA 234,6,201,1,208,3,222,234,6,
238,208,6,96,169,30,133,9233
2920 DATA 203,169,208,107,203,108,67,1
33,204,162,4,32,246,107,202,208,2647
2930 DATA 258,232,32,11,108,232,224,4,
208,248,32,246,107,202,208,250,6311
2940 DATA 162,7,189,234,112,157,160,6,
202,16,247,96,160,0,173,192,883
2950 DATA 6,208,2,169,168,41,168,145,2
03,160,40,145,203,160,80,145,1482
2960 DATA 203,24,169,240,101,203,144,2
,230,204,133,203,96,72,152,72,1122
2970 DATA 172,216,6,185,160,6,141,10,2
12,141,23,208,208,192,8,208,1038
2980 DATA 2,160,0,140,216,6,104,168,10
4,64,162,48,189,242,112,157,1021
2990 DATA 96,6,202,16,247,96,160,0,185
,32,113,153,0,128,200,192,9627
3000 DATA 13,208,245,152,153,0,128,200
,192,106,208,248,169,65,153,0,1487
3010 DATA 128,208,169,0,153,0,128,200,
169,63,153,0,128,160,21,162,7951
3020 DATA 4,169,141,153,0,128,153,41,1
28,152,24,105,6,168,202,208,9548
3030 DATA 240,96,162,15,169,104,157,0,
6,169,79,157,16,6,169,10,4060
3040 DATA 157,32,6,169,6,157,48,6,169,
64,157,64,6,169,0,157,4923
3050 DATA 80,6,202,16,223,96,160,0,169
,0,153,0,120,153,0,121,5465
3060 DATA 153,0,122,153,0,123,200,208,
241,169,1,141,20,122,141,21,7974
3070 DATA 122,141,148,122,141,149,122,
169,40,141,0,208,141,1,208,96,8980
3080 DATA 162,4,204,108,199,109,254,16
8,6,189,168,6,201,10,208,10,8962
3090 DATA 169,0,157,168,6,202,224,0,20
8,236,162,3,189,168,6,24,8545
3100 DATA 42,42,105,109,168,185,113,11
1,157,88,78,32,49,109,200,138,8512
3110 DATA 56,233,159,144,240,138,41,3,
170,202,224,0,208,222,162,3,1328
3120 DATA 189,168,6,201,9,208,33,202,2
08,246,173,231,6,201,97,208,4289
JULY A.N.A.L.O.O. Computing
3136 DATA 23,169,1,141,232,6,141,233,6
,169,6,141,218,6,169,0,7960
3148 DATA 141,221,6,169,40,141,220,6,7
6,128,109,138,105,40,170,96,7881
3150 DATA 162,1,160,3,189,102,6,89,124
,6,41,254,208,53,189,180,8673
3160 DATA 6,89,120,6,41,254,208,43,140
,212,6,152,224,0,240,3,9087
3170 DATA 24,105,4,168,185,160,6,240,2
3,169,0,153,160,6,222,210,522
3180 DATA 6,169,15,141,220,6,169,0,141
,221,6,169,3,141,218,6,7404
3190 DATA 172,212,6,136,16,190,202,240
,185,96,173,218,6,240,57,201,3555
320O DATA 2,240,54,201,3,240,83,201,4,
240,116,201,5,208,3,76,8654
3219 DATA 33,110,201,6,208,3,76,61,118
,174,219,6,202,142,219,6,9374
3220 DATA 169,240,141,0,210,138,24,105
,160,141,1,210,224,0,208,8,8719
3230 DATA 142,218,6,169,16,141,219,6,9
6,169,32,32,106,110,173,221,9348
3240 DATA 6,233,200,109,195,110,8,176,
11,174,220,6,202,48,9,142,7883
3250 DATA 220,6,169,128,141,221,6,96,1
69,8,141,218,6,96,169,160,9547
3260 DATA 32,106,110,173,221,6,24,105,
32,144,233,174,220,6,202,202,2260
3270 DATA 48,9,142,220,6,169,0,141,221
,6,96,169,160,141,1,210,9376
3280 DATA 76,218,109,169,64,32,106,110
,173,221,6,56,233,32,176,196,687
3290 DATA 174,220,6,202,48,194,142,220
,6,169,224,141,221,6,96,169,1889
3300 DATA 160,32,106,110,173,221,6,24,
105,32,144,11,174,220,6,202,8352
3310 DATA 48,166,142,220,6,138,10,141,
221,6,96,169,110,141,1,210,8964
3320 DATA 173,220,6,141,0,210,174,221,
6,232,224,60,208,22,173,220,3446
3330 DATA 6,201,60,208,8,169,168,141,1
,210,76,218,109,169,60,141,552
3340 DATA 220,6,162,0,142,221,6,96,24,
109,220,6,141,1,210,173,8467
3358 DATA 221,6,141,0,210,96,169,140,1
41,34,2,169,110,141,35,2,5555
3360 DATA 169,255,141,252,2,169,160,14
1,1,210,169,0,141,196,2,173,85
3370 DATA 192,6,208,3,32,35,105,173,25
2,2,201,255,240,30,169,255,4413
3380 DATA 141,252,2,169,0,141,34,2,169
,107,141,35,2,169,255,141,8842
3390 DATA 30,208,173,193,6,208,5,169,1
50,141,196,2,76,95,228,173,1238
3400 DATA 223,6,196,110,191,111,240,3,
32,35,105,76,98,228,173,192,826
3410 DATA 6,208,3,32,35,105,32,128,109
, 76 , 95, 228, 211, 65, 44, 45, 6577
3420 DATA 46,47,48,37,26,26,26,200,4,1
,19,22,23,20,6,26,7524
3430 DATA 26,200,19,1,20,1,12,24,25,6,
26,200,11,51,52,53,9755
3440 DATA 26,26,26,26,26,24,38,39,40,4
1,42,43,22,24,37,200,677
3450 DATA 4,12,6,1,20,26,26,26,26,200,
2,3,1,4,11,18,6960
3460 DATA 23,22,26,200,7,12,1,21,8,6,2
1,26,26,24,6,13,6334
3470 DATA 14,15,16,17,37,27,28,24,21,1
9,6,6,5,37,26,26,6271
3480 DATA 26,200,6,13,14,15,16,17,37,2
8,26,280,19,12,1,24,8497
3490 DATA 6,20,28,37,28,200,19,12,1,24
,6,20,29,37,28,24,7591
3500 DATA 12,9,10,49,50,37,24,26,26,24
,22,9,10,6,20,37,6534
3510 DATA 27,27,27,0,48,204,252,204,48
,204,252,204,240,207,243,252,9919
3520 DATA 48,48,48,60,252,192,192,252,
240,204,204,240,252,240,192,252,2692
3530 DATA 252,240,192,192,204,252,204,
204,207,207,204,204,60,252,204,12,7383
3540 DATA 204,240,240,204,192,192,192,
252,243,243,297,207,63,60,48,63,3997
3550 DATA 60,63,51,48,243,243,48,48,48
,240,192,192,252,204,204,252,7946
3560 DATA 252,204,192,111,187,112,252,
192,252,204,240,204,252,240,12,252,391
3570 DATA 252,48,48,48,284,204,204,252
,204,252,48,48,252,60,192,252,6430
3580 DATA 0,0,0,0,252,204,204,252,48,2
40,48,252,252,68,192,252,6920
3590 DATA 252,60,12,252,192,204,252,12
,252,240,12,252,252,192,252,252,650
3600 DATA 252,12,48,192,252,204,252,25
2,252,204,252,12,0,48,8,48,9716
3610 DATA 204,204,252,48,287,207,192,2
07,204,12,204,204,240,207,243,252,790
3620 DATA 51,51,51,51,12,12,12,204,255
,192,207,255,12,51,63,51,8161
3630 DATA 60,63,51,48,243,243,51,51,24
0,192,0,240,207,195,195,195,6025
3640 DATA 192,0,0,0,204,204,204,207,12
,12,12,207,0,0,0,192,5076
3650 DATA 255,255,255,60,60,15,240,63,
252,63,252,63,240,60,60,60,240
3660 DATA 60,60,60,63,252,63,240,0,48,
0,0,243,195,15,207,192,9868
3670 DATA 252,252,195,51,204,255,255,2
55,0,0,0,63,252,60,60,0,7362
3680 DATA 252,63,240,60,60,60,60,63,60
,63,60,63,240,60,60,0,4048
3690 DATA 60,204,0,204,204,195,3,0,240
,204,195,51,204,0,0,0,6794
3700 DATA 0,0,0,51,204,63,252,63,0,60,
0,63,192,60,60,60,4122
3710 DATA 252,60,252,60,0,63,192,0,60,
48,0,204,207,195,3,0,5734
3720 DATA 192,240,188,112,88,113,195,5
1,60,0,0,0,0,0,0,48,9603
3730 DATA 12,60,60,63,252,63,252,60,60
,63,252,60,60,60,60,63,6366
3740 DATA 252,60,60,0,0,240,0,192,204,
195,3,0,192,204,60,51,8155
3750 DATA 60,0,0,0,104,70,22,118,104,7
0,22,118,145,145,65,65,5072
3760 DATA 19,19,40,40,0,0,64,64,0,0,0,
0,167,124,81,103,1827
3770 DATA 65,72,79,79,19,63,107,107,12
8,84,40,128,0,0,0,0,578
3780 DATA 64,64,64,64,0,0,106,72,24,12
0,112,112,112,78,8,64,3302
3790 DATA 14,14,14,0,77,64,65,0,0,220,
65,76,69,188,72,156,6830
3800 DATA 74,100,75,44,76,68,77,0,0,16
3,107,51,19,219,163,66,6035
3810 DATA 67,68,70,70,71,0,1,1,1,1,163
,18,218,66,70,65,2749
3820 DATA 60,60,255,226,2,227,2,0,96,0
,0,0,0,0,0,0,7919 fl
JULY A.IM.A.L.O.G. Computing
continued from page 63
0620
.BYTE $88 ;DEY
0630
.BYTE $49, 545, $55,
$4D
EOR
0640
.BYTE $5D,$59,$41,
$51
0650
.BYTE $E6,$F6,$EE,
$FE
INC
0660
.BYTE $E8 JINX
0670
.BYTE $C8 JINY
0680
.BYTE $4C,$6C ;JMP
0690
•BYTE $20 ;J5R
0700
.BYTE $A9,$A5,$B5,
$AD
LDA
0710
.BYTE $BD,$B9,$A1,
$B1
0720
.BYTE $A2,$A6,$B6,
$AE
LDX
0730
.BYTE $BE
0740
.BYTE $A0,$A4,$B4,
SAC
LDY
0750
.BYTE $BC
0760
.BYTE $4A,$46,$56,
$4E
LSR
0770
.BYTE $5E
0780
.BYTE $EA JNOP
0790
.BYTE $09, $05, $15,
$0D
ORA
0800
.BYTE $1D,$19,$01,
$11
0810
.BYTE $48 JPHA
0820
.BYTE $08 JPHP
0830
.BYTE $68 JPLA
0840
.BYTE $28 ;PLP
0850
.BYTE $2A,$26,$36,
$2E
ROL
0860
.BYTE $3E
0870
.BYTE $6A,$66,$76,
$6E
ROR
0880
.BYTE $7E
0890
.BYTE $40 ;RTI
0900
.BYTE $60 ;RT5
0910
.BYTE $E9,$E5,$F5,
$ED
SBC
0920
•BYTE $FD,$F9,$E1,
$F1
0930
.BYTE $38 ;SEC
0940
.BYTE $F8 JSED
0950
.BYTE $78 ;SEI
0960
.BYTE S85,$95,$8D
J5TA
0970
.BYTE $9D,$99,$81,
$91
0980
.BYTE $86,$96,$8E
;5TX
0990
.BYTE $84,$94,$8C
J STY
1000
•BYTE $AA JTAX
1010
•BYTE $A8 JTAY
1020
.BYTE $BA ;T5K
1030
.BYTE $8A JTXA
1040
.BYTE $9A JTXS
1050
•BYTE $98 JTYA
1060
;
1070
;0ffsets into Mnenonic table
1080
1
1090
1FF5ET
1100
.BYTE 0,0,0,0,0,0
0,0
J ADC
1110
.BYTE 3,3,3,3,3,3
3,3
JAND
1120
.BYTE 6,6,6,6,6 JASL
1130
•BYTE 9 ;BCC
1140
.BYTE 12 JBCS
1150
.BYTE 15 ;BEQ
1160
.BYTE 18,18 ;BIT
1170
.BYTE 21 ;BMI
1180
.BYTE 24 JBNE
1190
.BYTE 27 ;BPL
1200
.BYTE 30 ,-BP.K
1210
.BYTE 33 ;BUC
1220
.BYTE 36 JBVS
1230
•BYTE 39 ;CLC
1240
•BYTE 42 JCLD
1250
.BYTE 45 JCLI
1260
•BYTE 48 JCLU
1270
.BYTE 51,51,51,51
JCMP
1280
.BYTE 51,51,51,51
1290
.BYTE 54,54,54 JCPX
1300
.BYTE 57,57,57 ; CPY
1310
.BYTE 60,60,60,60
;DEC
1320
.BYTE 63 ;DEX
1330
.BYTE 66 ;DEY
1340
.BYTE 69,69,69,69
;EOR
1350
.BYTE 69,69,69,69
1360
•BYTE 72,72,72,72
;INC
1370
.BYTE 75 ;INX
1380
.BYTE 78 ;INY
1390
.BYTE 81,81 ;JMP
1400
.BYTE 84 ;JSR
1410
.BYTE 87,87,87,87
JLDA
1420
.BYTE 87,87,87,87
1430
.BYTE 90,90,90,90
90 ;
LDX
1440
.BYTE 93,93,93,93
93 ;
LDY
1450
•BYTE 96,96,96,96
96 ;
LSR
1460
.BYTE 99 ;MOP
1470
.BYTE 102,102,102
102
;ORA
1480
.BYTE 102,102,102
102
1490
.BYTE 105 JPHA
1500
.BYTE 108 JPHP
1510
■BYTE 111 ;PLA
1520
.BYTE 114 JPLP
1530
.BYTE 117,117,117
,117
;rol
1540
.BYTE 117
1550
.BYTE 120,120,120
,120
;ROR
1560
■BYTE 120
1570
.BYTE 123 ;RTI
1580
.BYTE 126 ;RTS
1590
.BYTE 129,129,129
,129
;sbc
1600
.BYTE 129,129,129
,129
1610
.BYTE 132 ;5EC
1620
.BYTE 135 ;SED
1630
.BYTE 138 JSEI
1640
.BYTE 141,141,141
,141
;sta
1650
.BYTE 141,141,141
1660
1670
1680
1690
1700
1710
1720
1730
1740
1750
1760
1770
1780
1790
1800
1810
1820
1830
1840
1850
1860
1870
1880
1890
1900
1910
1920
1930
1940
1950
1960
1970
1980
1990
2000
2010
2020
2030
2040
2050
2060
2070
2080
2090
2100
2110
2120
2130
2140
2150
2160
2170
2180
2190
2200
2210
2220
2230
2240
2250
2260
2270
2280
2290
2300
2310
2320
2330
2340
2350
2360
2370
2380
2390
2400
2410
2420
2430
2440
2450
2460
2470
2480
2490
2500
2510
2520
2530
2540
2S50
2560
2570
2580
2590
2600
2610
2620
2630
2640
2650
2660
2670
2680
2690
2700
2710
2720
2730
2740
2750
2760
2770
2780
2790
.BYTE 144,144,144 ;STX
.BYTE 147,147,147 ;STY
.BYTE 150 ;TAX
.BYTE 153
.BYTE 156
.BYTE 159
.BYTE 162
.BYTE 165
;TAY
JTSX
;TXA
JTXS
JTYA
Instruction Types
= iMMe
= Zero
= Zero
= Abso
= Abso
= Abso
= Indi
= Indi
= ACCU
= Rela
= ImpI
s Indi
= Zero
diate
page
page,X
lute
lute,X
lute,Y
rect,X
rect,Y
Mulator
tive
ied
rect
page, Y
ITYPE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
• BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
■ BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
0,1
0,1
8,1
9
9
9
1,3
9
9
9
10
9
9
10
10
10
10
0,1,
0,1,
0,1,
1,2
10
10
8,1
1,2
10
10
3,11
3
0,1
0,1,
0,1
8,1
10
0,1
10
10
10
10
8,1,
8,1
10
10
0,1
10
10
10
1.2
1,12
1,2,
10
10
10
10
10
.10
;adc
J AND
2
z
3
3,4
2,3,4,5,6,7
2,3,4,5,6,7
2,3,4 JASL
BCC
BCS
BEQ
BIT
BMI
BNE
BPL
BRK
BUC
BUS
CLC
CLD
CLI
CLU
1,4,5,6,7 JCMP
CPX
CPY
DLC
DEX
,DEY
2,3,4,5,6,7 ;EOR
3,4 ;INC
JINX
;INY
; JMP
; JSR
2,3,4,5,6,7 ;LDA
12,3,5 JLDX
2,3,4 ;LDY
2,3,4 JLSR
JNOP
2,3,4,5,6,7 JORA
;PHA
JPHP
JPLA
JPLP
2,3,4 JROL
2,3,4 JROR
JRTI
JRTS
2,3,4,5,6,7 JSBC
JSEC
JSED
JSEI
3,4,5,6,7 JSTA
,3 JSTX
3 J STY
JTAX
JTAY
JTSX
JTXA
JTXS
JTYA
jDisasseMbler JMP Tables
DCOMT .WORD IMMED
•WORD ZPAG
.WORD ZPAGX
.WORD ABSOL
.WORD AB50LX
.WORD ABSOLY
.WORD INDX
.WORD INDY
.WORD ACCUM
.WORD RELA
.WORD IMP
.WORD INDI
.WORD ZPAGY
NBTAB .BYTE 2,2,2
.BYTE 2,1,2,1
2 bytes
2 bytes
2 bytes
3 bytes
;3 bytes
j 3 bytes
2 bytes
bytes
bytes
bytes
bytes
bytes
bytes
3,3,2
,3,2
COMMAX .BYTE ",X)"
COMMAY .BYTE "Y,J"
POINTB .BYTE " .BYTE $"
5TEN .BYTE " *=$ '■
.BYTE "JEND=$ ",EOL,EOL,0
INS_DST .BYTE EOL, "Insert des"
.BYTE "t'n, RETURN", EOL,
IN5_SRC .BYTE EOL, "Insert SOU"
.BYTE "rce, RETURN", EOL, 8
ALL. DONE .BYTE EOL, "COMp 1 eted"
2800 .BYTE ", RETURN", EOL,
2810 J
2820 OUTP .BYTE EOL, "OUTPUT ",0
2830 IN_P .BYTE EOL, "INPUT ",0
LISTING 6: ASSEMBLY
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
0220
0230
0240
0250
0260
0270
0280
0290
8300
0310
0320
0330
0340
0350
0360
0370
0380
0390
0400
0410
0420
0430
0440
0450
0460
0470
0480
0490
0500
0510
0520
0530
0540
0550
0560
0570
0580
0590
0600
0610
0620
0630
0640
0650
0660
0670
0680
0690
0700
0710
0720
0730
0740
0750
0760
0770
0780
0790
0800
0810
0820
0830
0840
0850
0860
0870
0880
0890
0900
0910
0920
0930
0940
0950
0960
0970
0980
0990
1000
1010
1020
1030
1040
1050
1060
1070
1080
1090
1100
1110
1120
1130
1140
1150
5AUEUD:DMPT5.M65
SysteM Equates/Labels
Consistent with MAPPING THE
ATARI froM COMpute! books.
Data storage technique by:
Bryan Schappel
.CBYTE
.CBYTE
.CBYTE
.CBYTE
•CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
■CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
•CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
.CBYTE
$19, $00, $02,
$09, $00, $06,
$09, $00, $08,
$08, $00, $09,
$19,$O0,$0A,
$19,$0O,$OC,
$09, $00, $10,
$09, $00, $11,
$29, $00, $12,
$09, $00, $20,
$09, $00, $21,
$09, $00, $22,
$09, $00, $23,
$09, $0O, $24,
$09, $00, $25,
$09, $0O, $26,
$09, $00, $27,
$89, $00, $28,
$09, $00, $29,
$09,$00,$2A,
$09,$00,$2B,
$09, $00, $41,
$09, $00, $42,
$09,$00,$4D,
$09, $00, $52,
$09, $00, $53,
$09, $00, $54,
$19, $00, $55,
$19, $00, $58,
$09,$00,$6A,
$56,$G0,$D4,
$56,$O0,$DA,
$56,$00,$E0,
$56,$00,$E6,
$06,$00,$EC,
$07,$00,$ED,
$08, $00, SEE,
$08,$00,$EF,
$OA,$00,$FO,
$08,$00,$F1,
$O6,$O0,$F2,
$19,$00,$F3,
$09,$00,$FB,
$18,$00,$FC,
$18,$00,$FE,
$19, $02, $00,
$19, $02, $06,
$19, $02, $08,
$19, $02, $22,
$19, $02, $24,
$09,$02,$2B,
$09,$02,$2F,
$19, $02, $30,
$09, $02, $32/
$08, $02, $34,'
$08, $02, $35/
$08, $02, $36,'
$09, $02, $44,'
$O9,$02,$6F,'
$79, $02, $70,'
$39, $02, $78,'
$79,$02,$7C,'
$39, $02, $85,'
$09,$G2,$A2,'
$E9,$02,$A3,'
$09,$O2,$B6,'
S09,$02,$BE,'
$09,$02,$BF,'
S09,$02,$C0,'
S09,$02,$C1,'
$09,$02,$C2,'
$09,$02,$C3,'
$09,$02,$C4,'
$09,$02,$C5,'
$09,$02,$C6,'
$09,$02,$C7,'
$09,$02,$C8,'
$18,$O2,$E0,•
$19,$02,$E2,'
$09,$02,$E4,"
$19,$02,$ES,"
$18,$02,$E7,'
$39,$02,$EA,'
$09,$02,$F0,'
$G6,$02,$F2,'
$08,$02,$F3,"
$08,$02,$F4,"
$09,$02,$FB,'
$05,$02,$FC,'
$09,$02,$FE,'
$09,$02,$FF,"
$09, $03, $00,'
$08, $03, $01,'
$09, $03, $02,'
■CA5INI"
■TRAMSZ"
■WARMST"
■BOOT?"
'D05UEC"
•DOSINI"
■P0KM5K"
■BRKKEY"
■RTCLOK"
■ICHIDZ"
'ICDNOZ"
■ICCOMZ"
■ICSTAZ"
•ICBALZ"
■ICBAHZ"
■ICPTLZ"
■ICPTHZ"
■ICBLLZ"
■ICBLHZ"
■ICAX1Z"
'ICAX2Z"
■SOUNDR"
■CRITIC"
■ATRACT"
•LMARGN"
■RMARGN"
■ROWCRS"
■COLORS"
■SAVMSC"
■RAMTOP"
■FRO"
'FRE"
"FR1"
■FR2"
■FRX"
■EEXP"
'N5IGN"
■ESIGN"
■FCHRFLG"
■DIGRT"
■CIX"
■INBUFF"
■RADFLG"
•FLPTR"
•FPTR2"
'UDSLST"
•UBREAK"
'UKEYBD"
■UUBLKI"
•UUBLKD"
■SRTIMR"
■SDMCTL"
■SDLSTL"
■SSKCTL"
■LPENH"
■LPENU"
■BRKKY"
•C0LD5T"
■GPRIOR"
'PADDLO"
■STICKO"
'PTRIGO"
■STRIGO"
'ESCFLG"
■TABMAP"
INUFLG"
'SHFLOK"
'BOTSCR"
'PCOLRO"
'PC0LR1"
'PC0LR2"
'PC0LR3"
COLORO"
C0L0R1"
C0L0R2"
C0LOR3"
C0L0R4"
RUNAD"
INITAD"
RAMSIZ"
MEMTOP"
MEMLO"
DUSTAT"
CRSINH"
CHI"
CHACT"
CHBAS"
ATACHR"
CH"
DSPFLG"
SSFLAG"
DDEUIC"
DUNIT"
DCOMND"
JULY A.1M.A.L.O.Q. Computing
LISTING 7: ASSEMBLY
1160 .CBYTE $09,S03,$03,"D5TATS"
1170 .CBYTE $19,$03,$04,"DBUFL0"
1180 .CBYTE $O9,$O3,$06,"DTIMLO"
1190 .CBYTE $19,$03,$08,"DBYTL0"
1200 .CBYTE $18,$03,$0A,"DAUXi"
1218 .CBYTE $29,$03,$1A,"HATABS"
1220 .CBYTE $88, $83, $40, "ICHID"
1230 .CBYTE $08 , $83 , $41 , "ICDNO"
1240 .CBYTE $08, $83, $42, "ICCBM"
1250 .CBYTE $08, $03, $43, "ICSTA"
1260 .CBYTE $88 , $03 , $44 , "ICBAL"
1270 .CBYTE $08, $03 , $45 , "ICBAH"
1280 .CBYTE $08 , $03 , $46, "ICPTL"
1290 .CBYTE $08 , $83, $47, "ICPTH"
1308 .CBYTE $08 , $03 , $48 , "ICBLL"
1310 .CBYTE $88,$03,$49,"ICBLH"
1320 .CBYTE $08 , $03 , $4A , "ICAX1"
1330 .CBYTE $08, $03, $4B, "ICAX2"
1348 .CBYTE $09, $03, $C0, "PRNBUF"
1350 .CBYTE $89, $03, $FD, "CA5BUF"
1368 .CBYTE $08, $05, $80, "LBUFF"
1370 .CBYTE $09, $D0, $00, "HPOSPO"
1388 .CBYTE $09, $D0, $01, "HP0SP1"
1390 .CBYTE $89, $D0, $02, "HP05P2"
1400 .CBYTE $B9,$DB,$03,"HPOSP3"
1410 .CBYTE $09,$D0,$04,"HPO5M0"
1420 .CBYTE $09 , $D0 , $05, "HP05M1"
1430 .CBYTE $09, $DB, $06, "HP0SM2"
1440 .CBYTE $09 , $D0 , $07 , "HP0SM3"
1458 .CBYTE $89, $D0, $88, "5IZEP0"
1460 .CBYTE $09 , $D0, $89, "5IZEP1"
1470 .CBYTE $09, $D8, $0A, "SIZEPZ"
1480 .CBYTE $09, $D8, $0B, "5IZEP3"
1498 .CBYTE $08, SDO, $0C, "5IZEM"
1588 .CBYTE $09 , $D0 , $12 , "COLPMO"
1510 .CBYTE $09,$DO,$13,"COLPM1"
1520 .CBYTE $09, $D0, $14, "C0LPM2"
1530 .CBYTE $09, SDO, $15, "C0LPM3"
1540 .CBYTE $09, $D0, $16, "COLPFO"
1550 .CBYTE $09, $D0, $17, "C0LPF1"
1560 .CBYTE $09, $D8, $18, "C0LPF2"
1570 .CBYTE $09 , $D0 , $19 , "C0LPF3"
1580 .CBYTE $88, $D0, $10, "COLBK"
1590 .CBYTE $08, $D0, $1B, "PRIOR"
1680 .CBYTE $09, $D0, $1D, "GRACTL"
1610 .CBYTE $09,$DO,$1E,"HITCLR"
1620 .CBYTE $09, $D0, $1F, "CONSOL"
1630 .CBYTE $08 , $D2 , $00 , "AUDF1"
1648 .CBYTE $88 , $D2 , $81 , "AUDC1"
1658 .CBYTE $08 , $D2 , $82 , "AUDF2"
1660 .CBYTE S08 , $D2 , $03, "AUDC2"
1670 .CBYTE $08 , $D2 , $04 , "AUDF3"
1680 .CBYTE $08 , $D2 , $05, "AUDC3"
1698 .CBYTE $08 , $D2 , $06 , "AUDF4"
1700 .CBYTE $08,$D2,$07,"AUDC4"
1710 .CBYTE $09,SD2,$08,"AUDCTL"
1720 .CBYTE $89 , $02 , $0A , "RANDOM"
1730 .CBYTE $08 , $D2 , $0E , "IRQEN"
1740 .CBYTE $08, $D2, $0F, "SKCTL"
1750 .CBYTE $88, $D3, $88 , "PORTA"
1760 .CBYTE $08, $D3, $01, "PORTB"
1770 , CBYTE $08 , $D3 , $02 , "PACTL"
1788 , CBYTE $08 , $D3 , $03 , "PBCTL"
1790 .CBYTE $09 , $D4 , $00 , "DMACTL"
1808 .CBYTE $09 , $D4 , $01 , "CHACTL"
1818 , CBYTE $19,$D4,$02,"DLISTL"
1828 .CBVTE $09 , $D4 , $04 , "HSCROL"
1830 .CBYTE $Q9,$D4,$05,"USCR0L"
1848 .CBYTE $09 , $D4 , $07 , "PMBA5E"
1850 .CBYTE $09 , $D4 , $09 , "CHBA5E"
1860 .CBYTE $08 , $D4 , $0A , "W5YNC"
1878 .CBYTE $09 , $D4 , $0B , "VCOUNT"
1888 .CBYTE $87 , $D4 , $0C, "PENH"
1898 .CBYTE $07 , $D4 , SOD , "PENU"
1900 .CBYTE $G8,$D4,$0E,"NM1EN"
1910 .CBYTE $G6,$D8,$00,"AFP"
1920 .CBYTE $07 , $D8 , $E6 , "FASC"
1938 .CBYTE $86, $D9, $AA, "IFP"
1948 .CBYTE $86 , $D9 , $D2 , "FPI"
1950 .CBYTE $07, $DA , $44 , "ZFRO"
1960 .CBYTE $06 , $DA , $46 , "ZF1"
1970 .CBYTE $07, $DA, $60, "FSUB"
1988 .CBYTE $07 , $DA , $66 , "FADD"
1990 .CBYTE $07 , $DA , $DB , "FMUL"
2000 .CBYTE $07 , $DB , $28 , "FDIV"
2810 .CBYTE $09 , $DD , $40 , "PLYEUL"
2020 .CBYTE $88 , $DD , $89 , "FLDBR"
2030 .CBYTE $08 , $DD , $8D , "FLD8P"
2040 .CBYTE $88 , $DD , $98 , "FLD1R"
2850 .CBYTE $88 , $DD , $9C , "FLD1P"
2060 .CBYTE $08 , $DD , $A7 , "FSTOR"
2070 .CBYTE $08 , $DD, $AB , "F5T0P"
2080 .CBYTE $08 , $DD , $B6 , "FMOVE"
2090 .CBYTE $06 , $DD , $C0 , "EXP"
2100 .CBYTE $08,$DD,$CC,"EXP10"
2110 .CBYTE $06,$DE,$CD,"L0G"
2120 .CBYTE $08 , $DE, $D1, "L0G10"
2138 .CBYTE $89 , SE4 , $00, "EDITRV"
2140 .CBYTE $09 , $E4 , $10 , "5CRENU"
2150 .CBYTE $09 , $E4 , $20 , "KEYBDU"
2160 .CBYTE $09, SE4, $30, "PRINTU"
2170 .CBYTE $09 , SE4 , $40 , "CASETU"
2188 .CBYTE $09 , $E5 , $50 , "DI5KIU"
2190 .CBYTE $09 , $E4 , $53 , "DSKINU"
2200 .CBYTE $07 , SE4 , $56 , "CIOV"
2210 .CBYTE $07 , $E4 , $59 , "5I0V"
2220 .CBYTE $09 , $E4 , $5C , "SETVBV"
2230 .CBYTE $09 , $E4 , $5F , "5Y5VBV"
2240 .CBYTE $09 , $E4 , $62 , "XITUBU"
2250 .CBYTE $09 , $E4 , $74 , "HARMSV"
2260 .CBYTE $09 , $E4 , $77 , "COLDSU"
2270 .BYTE $00
JULY A.N.A.L.O.Q. Computing
SYSTEM EQUATES FILE FOR
ATARI HOME COMPUTERS
Last Revised: 6/26/88
DISK I/O
;D: UNIT
;D: coMMand
isector buffer
0100
0110
0120
0130
0140
0150
0160
0170
0180 D5KINV
0190 SIOV X
0200 DDEUIC
0210 DUNIT
0228 DCOMND
0230 D5TATS
0240 DBUFLO
0250 DBUFHI
0260 DTIMLO
0270 DBYTLO
0280 DBYTHI
0290 DSECLO
0300 DSECHI
0310 DAUX1 S $030A
0320 DAUX2 X $030B
0330 |
0340 ;CI0 ROUTINES
0350 ;
0360 CIOU
0370 ICCOM
0380 ICBAL
0390 ICBAH
0400 ICBLL = $0348
0410 ICBLH = $0349
0420 AUX1 =
0430 AUX2 X
0440 RUNAD
0450 INITAD
0460 ;
0470 ;SCREEN HANDLER/INTERRUPTS
0480 ;
$0200
$0206
$0208
$8224
$8222
$0228
S022F
$D400
$0230
S02C8
S02CJ
$02C2
$02C3
$02C4
$02C5
$02C6
$02C7
$02C8
: SE453
SE459
= $0300
$0301
= $0302
: $0303
: $0304
= $0305
= $0306
; $0308
$0309
$030A
$030B
$E456
$0342
$0344
$0345
S034A
S034B
$02E0
: $02E2
; sector n
;CI0 vector
; c oMwand
;buffer address
;buffer len
0490 UD5L5T
0500 VBREAK
0510 UKEYBD
0520 UUBLKD
0530 VVBLKI
0540 SRTIMR
0550 5DMCTL
0560 DMACTL
0570 5DLSTL
0580 PCOLRO
0590 PC0LR1
0600 PC0LR2
0610 PC0LR3
0620 COLORO
0630 C0L0R1
0640 C0L0R2
0650 C0L0R3
0660 C0L0R4
0670 CHBAS = $02F4
0680 SETVBV = $E45C
0690 SYSUBU = $E45F
0700 XITUBU = $E462
0710 NMIEN = SD40E
0720 UCOUNT - $D40B
0730 CHBASE = SD409
0740 H5YNC s $D40A
0750 CHACT X $02F3
0760 CHACTL X $D401
0770 CRSINH X $02F0
0780 CHR5ET
0790 HSCROL
0800 VSCROL
0818 IROEN
0820 ;
0830 ;MISC.
0840 ;
0850 CONSOL = $D01F
0860 RTCLOK S $14
0870 CH = $02FC
0880 MEMLO = $02E7
0890 SHFLOK = $02BE
0900 INUFLG = $02B6
0910 HARMSV = $E474
0920 COLDSU = SE477
0930 LBUFF = $0580
0940 EOL = $9B
0950 RANDOM = $D20A
0960 PORTA s $D300
0970 PORTB = $D30i
0980 j
0990 jDevice Vectors
1000 i
1010 HATABS = $031A
1020 EDITRU = $E400
1030 5CRENU = $E410
1040 KEYBDU = SE420
1050 PRINTU : $E430
1060 CA5ETU = $E440
1070 ;
1080 JPAGE ZERO LOCATIONS
1090 ;
1100 CA5INI = $02
1110 TRAM5Z = $06
1120 HARMST = $08
1138 BOOT? = $09
1140 DOSVEC = $0A
;DLI vector
;BRK vector
;keyboard vec
;key repeat
;DMA control
;displag list
;char set
: $E000
: $D404
: $D405
$D20E
;ROM characters
;console keys
1150 DOSINI
1160 P0KM5K
1170 BRKKEY
1180 SOUNDR
1190 CRITIC
1200 ATRACT
1210 KEYDEF
$0C
$10
$11
$41
$42
$4D
$79
1220
LMARGN = $52
1230
RMARGN X $53
1240
R0WCR5 - $54
1250
COLCRS = $55
1260
SAVMSC = $58
1270
RAMTOP = S6A
1280
;
1290
; FLOATING POINT
1300
]
1310
FRO s $D4
1320
FRE = $DA
1330
FR1 = $E0
1340
FR2 = $E6
1350
FRX 5 SEC
1360
EEXP = $ED
1370
NSIGN = $EE
1380
ESIGN = $EF
1390
FCHRFLG S $F0
1400
DIGRT = $F1
1410
CIX = $F2
1420
INBUFF = $F3
1430
RADFLG = $FB
1440
AFP S SD800
1450
FASC X SD8E6
1460
IFP X $D9AA
1470
FPI = $D9D2
1488
ZFRO = $DA44
1498
ZF1 = $DA46
1500
FSUB = SDA60
1510
FADD X $DA66
1520
FMUL = $DADB
1530
FDIU X SDB28
1540
PLYEUL = $DD40
1550
FMOUE = SDDB6
1560
EXP = SDDCO
1570
EXP10 X $DDCC
1580
LOG = SDECD
1590
L0G10 = SDED1
1600
;
1610
;STICK, PADDLES, TRIGGER5
1620
!
1630
PADDLO = $0270
1640
PADDL1 = $0271
1650
PADDL2 = $0272
1660
PADDL3 = $0273
1670
5TICK0 = $0278
1680
STICK1 = $0279
1690
PTRIGO r S027C
1700
PTRIG1 = S027D
1710
PTRIG2 = S027E
i ? 2
PTRIG3 s S027F
1730
STRIGO = $0284
1740
STRIG1 X $0285
1750
;
1760
;AUDI0 CONTROL
1770
•
1780
AUDF1 - $D200
1790
AUDC1 = $D201
1800
AUDF2 = SD202
1810
AUDC2 = SD203
1820
AUDF3 = $D204
1830
AUDC3 X SD205
1840
AUDF4 = SD206
1850
AUDC4 = SD207
1860
AUDCTL s SD208
1870
SKCTL = SD20F
1880
\
1890
;P/M GRAPHICS
1900
j
1910
PMBASE = $D407
1920
GPRIOR = S026F
1930
HPOSPO = SDOOO
1940
HPOSPi = SD001
1950
HP05P2 = SD002
1960
HP0SP3 = SD003
1970
MOPF X SDOOO
1980
M1PF = $D001
1990
M2PF X $D002
2000
M3PF = $D0G3
2010
HPOSMO = SD004
2020
HP0SM1 = SD005
2030
HP05M2 = SD006
2040
HP05M3 = $D007
2050
POPF = $D004
2060
P1PF = SD005
2070
P2PF = SD006
2080
P3PF = SD007
2090
5IZEP0 = SD008
2100
5IZEP1 X SD009
2110
SIZEP2 = $DOOA
2120
SIZEP3 = $DOOB
2130
MOPL = $D008
2140
M1PL = $D009
2158
M2PL = SDOOA
2160
M3PL = $DOOB
2170
SIZEM = $DOGC JMiss
i 1 e size
2180
POPL = SDOOC iPlay
er/pf
2190
P1PL = SDOOD
2200
P2PL = SDOOE
2210
P3PL = $DOOF
2220
COLPMO = SD012
2230
C0LPM1 = 5D013
2240
C0LPM2 X SD014
2250
C0LPM3 = SD015
2260
COLPFO = SD016
2270
C0LPF1 = SD017
2280
C0LPF2 = SD018
2290
C0LPF3 = SD019
2300
COLBK s $D01A
2310
GRACTL = $D01D
2320
HITCLR = SD01E
2330
GRAFPO = SDOOD
2340
GRAFP1 = SDOOE
2350
GRAFP2 = SDOOF
2360
GRAFP3 = SD010
d™
2370
GRAFM = SD011
k
mJ£
S
xW-,
6e
• : «
■!■
-■I.
fSif^B>
Sk
M\P% 1
BOOT CAMP
END USER
ST NOTES